Утверждён стандарт C++20

Метки: /

Комитет ISO по стандартизации языка C++ утвердил международный стандарт «C++20«. Представленные в спецификации возможности, за исключением единичных случаев, поддерживаются в компиляторах GCC, Clang и Microsoft Visual C++. Поддерживающие C++20 стандартные библиотеки реализованы в рамках проекта Boost.

В следующие два месяца утверждённая спецификация будет находиться на стадии подготовки документа к публикации, на которой будет проведена работа по редакторской правке орфографических ошибок и опечаток. В начале ноября результирующий вариант документа будет направлен в ISO для публикации под формальным именем ISO/IEC 14882:2020. Тем временем, комитет уже приступил к работе над следующим стандартом C++23 (C++2b) и на ближайшем виртуальном совещании рассмотрит возможные новшества.

Основные особенности C++20:

  • Добавлены «концепции», расширения шаблонов, позволяющие определить набор требований к параметрам шаблона, которые во время компиляции ограничивают набор аргументов, которые могут приниматься в качестве параметров шаблона. Концепции можно применять для того, чтобы избежать логических несоответствий между свойствами типов данных, используемых внутри шаблона, и свойствами типов данных входных параметров.
  • В состав приняты расширения для работы с модулями, которые можно использовать вместо заголовочных файлов. Модули предоставляют новый способ организации исходных текстов на основании определения границ компонентов, без подключаемых через «#include» заголовочных файлов.
  • Макрос __VA_OPT__ для адаптивного раскрытия вариативных макросов в зависимости от наличия токенов в вариативном аргументе.
  • Поддержка оператора «» для трехстороннего сравнения.
  • Поддержка инициализаторов элементов по умолчанию для битовых полей.
  • Возможность лямбда-захвата выражений «*this».
  • Вызов элементов по указателю (Pointer-to-member), используя определённые через выражение «const &» указатели на временные объекты.
  • Оператор delete с деструктором, описанный в документе P0722R1.
  • Классам разрешено использование параметры шаблона без типа.
  • Не сохраняемые лямбда-выражения с конструктором.
  • Допустимость использования синтаксиса шаблонов для ламбда-выражений («auto f = []‹typename T›(std::vector‹T› v)»).
  • Возможность использования строковых литералов в параметрах шаблона.
  • Поддержка синтаксиса инициализации в стиле Си — явно не перечисленные в списке инициализации поля, инициализируются по умолчанию.
  • Поддержка пустых членов структур данных.
  • Поддержка атрибутов likely и unlikely для информирования оптимизатора о вероятности срабатывания условной конструкции («[[likely]] if (random › 0) {«).
  • Возможность использования диапазонов для инициализации значений переменной в цикле «for»
  • Автоматическое вычисление размера массива в new («new double[]{1,2,3}»);
  • Атрибут «[[no_unique_address]]» при котором переменные без данных не занимают места.
  • Атомарные указатели (std::atomic‹shared_ptr‹T›› и std::atomic‹weak_ptr‹T››).
  • Возможность вызова виртуальных функций в условных выражениях.
  • Поддержка быстрых (immediate) функций, которые могут работать только с константами.
  • Возможность применения constexpr с виртуальными функциями («constexpr virtual int f() const { return 2; }»).
  • В стандартной библиотеке:
    • Добавлена поддержка типа char8_t для строк UTF-8.
    • Добавлены заголовочные файлы bit (битовые операции) и version.
    • Появилась возможность проверки префикса и суффикса строк (starts_with, ends_with).
    • Добавлены типажи std::remove_cvref, std::unwrap_reference, std::unwrap_decay_ref, std::is_nothrow_convertible и std::type_identity.
    • Добавлены функции std::midpoint, std::lerp, std::bind_front, std::source_location, std::visit, std::is_constant_evaluated и std::assume_aligned.
    • В std::make_shared добавлена поддержка массивов.
    • Добавлена функция std::to_array для преобразования похожих на массив объектов в std::array.
  • Более удобный синтаксис перечислений:
  • В индексах из-за неопределённого поведения запрещено использование операции «,» («a[b,c]»). Прекращена поддержка большинства операций с переменными, объявленными с ключевым словом volatile, в том числе запрещены операции «++» и «—» со стандартными типами.
  • Сокращено число ситуаций, в которых требуется указание «typename» для информировании о наличии типа.

Вывод:

В этой статье вы прочитали про новый стандарт языка программирования C++, думаю если вы используете этот язык, вам было интересно.

Источник: OpenNet.

Подписываетесь на соц-сети:

Оценка:

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд
(Пока оценок нет)
Загрузка...

Поделится:

Также рекомендую: