C ++ 17 является пересмотренной версией стандарта ISO / IEC 14882 для языка программирования C ++.
До того, как Комитет по стандартам C ++ установил трехлетний цикл выпуска, дата выпуска C ++ 17 была неопределенной. В то время редакция C ++ 17 также называлась C ++ 1z, после C ++ 0x или C ++ 1x для C ++ 11 и C ++. 1г для C ++ 14. Спецификация C ++ 17 достигла стадии проекта международного стандарта (DIS) в марте 2017 года. Этот DIS был единогласно одобрен, только с редакционными комментариями, а окончательный стандарт был опубликован в декабре 2017 года. В C ++ было внесено несколько изменений. Стандартная библиотека шаблонов, хотя для некоторых алгоритмов в заголовок
была предоставлена поддержка явного распараллеливания и некоторых синтаксических улучшений. был сделан.
Эта версия C ++ не только добавила новые функции, но и удалила некоторые из них.
std :: auto_ptr
, std :: random_shuffle
и старые функциональные адаптеры. В C ++ 11 они были заменены улучшенными средствами, такими как std :: unique_ptr
, std :: shuffle
, std :: bind
и лямбда-выражения.register
в качестве спецификатора класса хранения. Это ключевое слово сейчас зарезервировано и не используется.В C ++ 17 появилось много новых функций. Следующие ниже списки могут быть неполными.
static_assert
необязательноtypename
(в качестве альтернативы классу
) в параметре шаблона шаблонаauto
вывода из braced-init-listnamespace X :: Y {…}
вместо пространства имен X {пространство имен Y {…}}
[[fallthrough]]
, [[might_unused]]
и [[nodiscard]]
u8
) символьные литералы (строковые литералы UTF-8 уже существовали поскольку C ++ 11 ; C ++ 17 добавляет соответствующие символьные литералы для согласованности, хотя, поскольку они ограничены одним байтом, они могут хранить только ASCII )auto
в качестве типа для параметра шаблона, не являющегося типомif
с формой if constexpr (expression)
auto [a, b] = getTwoReturnValues ();
if
и переключают операторы
T
из выражений prvalue типа T
(игнорирование cv-квалификаторов верхнего уровня) не должно приводить к копированию или перемещению конструкторов из выражения prvalue. Для получения дополнительной информации см. copy elision.std :: pair (5.0, false)
вместо того, чтобы требовать явных типов аргументов конструктора std :: pair (5.0, false)
или дополнительной вспомогательной функции шаблона std :: make_pair (5.0, false)
.__has_include
, позволяя проверять доступность заголовка с помощью директив препроцессора__cplusplus
изменено на 201703L
std :: string_view
, ссылка только для чтения, не владеющая в последовательность символов или string-slice std :: optional
, для представления дополнительных объектов, типа данных, который не всегда может быть возвращен данным алгоритмом с поддержкой не -returnstd :: any
, для хранения одиночных значений любого типаstd :: uncaught_exceptions
, как замена std :: uncaught_exception
в исключении обработка try_emplace
и insert_or_assign
для std :: map
и std::unordered_map
ключ-значение ассоциативные структуры данных std :: size
, std :: empty
и std :: data
boost :: filesystem
std :: вариант
, помеченный тегом union контейнерstd :: byte
, позволяющий заменять char для типов данных, предназначенных для моделирования байта данных в виде байта, а не символаstd :: конъюнкция
, std :: disjunction
и std :: отрицание