C ++ 17

редактировать
Версия стандарта языка программирования C ++ 2017 г.

C ++ 17 является пересмотренной версией стандарта ISO / IEC 14882 для языка программирования C ++.

Содержание
  • 1 История
  • 2 Удалено
  • 3 Новые функции
    • 3.1 Язык
    • 3.2 Библиотека
  • 4 Поддержка компилятора
  • 5 Поддержка библиотеки
  • 6 См. Также
  • 7 Ссылки
История

До того, как Комитет по стандартам 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-list
  • Определения вложенных пространств имен, например, namespace X :: Y {…}вместо пространства имен X {пространство имен Y {…}}
  • Разрешение атрибутов для пространств имен и перечислителей
  • Новые стандартные атрибуты [[fallthrough]], [[might_unused]]и [[nodiscard]]
  • UTF-8 (u8) символьные литералы (строковые литералы UTF-8 уже существовали поскольку C ++ 11 ; C ++ 17 добавляет соответствующие символьные литералы для согласованности, хотя, поскольку они ограничены одним байтом, они могут хранить только ASCII )
  • Hexadecimal с плавающей точкой- point литералы
  • Использование autoв качестве типа для параметра шаблона, не являющегося типом
  • Оценка константы для всех аргументов шаблона, не являющихся типом
  • Свернуть выражения для вариативной темы plate
  • Статический объект времени компиляции ifс формой if constexpr (expression)
  • Объявления структурированной привязки, позволяющие auto [a, b] = getTwoReturnValues ​​();
  • Инициализаторы в ifи переключают операторы
  • копирование-инициализация и прямая инициализация объектов типа Tиз выражений prvalue типа T(игнорирование cv-квалификаторов верхнего уровня) не должно приводить к копированию или перемещению конструкторов из выражения prvalue. Для получения дополнительной информации см. copy elision.
  • Некоторые расширения для перевыровненного выделения памяти
  • Вывод аргументов шаблона класса (CTAD), введение руководств по выводам конструкторов, например. разрешение std :: pair (5.0, false)вместо того, чтобы требовать явных типов аргументов конструктора std :: pair (5.0, false)или дополнительной вспомогательной функции шаблона std :: make_pair (5.0, false).
  • Встроенные переменные, которые позволяют определять переменные в файлах заголовков без нарушения правила определения одного. Правила фактически такие же, как и встраиваемые функции
  • __has_include, позволяя проверять доступность заголовка с помощью директив препроцессора
  • Значение __cplusplusизменено на 201703L
  • Спецификации исключений были сделаны частью типа функции

Библиотека

Поддержка компилятора
  • GCC полностью поддерживает функции языка C ++ 17, начиная с версии 8.
  • Clang 5 и более поздние версии реализуют все функции C ++ 17.
  • Visual Studio 2017 15.8 (MSVC 19.15) поддерживает весь C ++ 17.
Поддержка библиотеки
  • libstdc ++, так как версия 9.1 полностью поддерживает C ++ 17 (8.1 без Parallelism TS и вместо этого ссылается на C99 из C11)
  • li bc ++ версии 9 частично поддерживает c ++ 17, а остальная часть находится в стадии разработки
  • Стандартная библиотека MSVC с 19.15 полная поддержка c ++ 17 за исключением «преобразований элементарных строк» ​​и ссылки на C99 вместо C11.
См. также
Ссылки
Последняя правка сделана 2021-05-13 08:52:44
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте