Комитет ISO утвердил спецификацию С++17
Новости
Комитет ISO формально утвердил спецификацию C++17. Ближайшие два месяца документы будут проходить финальную подготовку к публикации.
3К открытий3К показов
Комитет ISO по языку C++ единогласно утвердил спецификацию C++17. Теперь она формально является международным стандартом. Новые возможности уже есть в компиляторах GCC и clang, а также частично присутствуют в Intel C++ и Visual C++.
Работа над стандартом была завершена ещё в марте этого года. С тех пор происходила формальная процедура подтверждения, было внесено небольшое количество изменений. В результате голосования комиссии работа получила 23 замечания, все они не технического характера.
В течение следующих двух месяцев будет проходить подготовка документа к публикации, где будут исправлены все опечатки и ошибки. В начале ноября окончательный вариант документа будет направлен в ISO для публикации под формальным именем ISO/IEC 14882:2017. Комитет уже начал работу над следующим стандартом C++20.
Основные изменения в C++17
- Возможность инициализации переменных внутри выражений
if
иswitch
; - Возможность использования кодировки UTF-8 в символьных литералах;
- Шестнадцатеричные литералы с плавающей запятой;
- Указание текстового сообщения в
static_assert
теперь опционально; - Удалена поддержка триграфов;
- Возможность указания typename (как альтернативы классам) в параметрах вложенного шаблона;
- Новые правила вывода типа
auto
из списка инициализации (braced-init-list); - Возможность упрощённого определения вложенных параметров пространств имён:
namespace X::Y {...}
вместоnamespace X { namespace Y {...}}
; - Возможность указания атрибутов для пространств имён и перечислений;
- Новые стандартные атрибуты
[[fallthrough]]
,[[maybe_unused]]
и[[nodiscard]]
; - Проверка на неизменность (константность) для всех нетипизированных аргументов шаблонов;
- Сворачивание выражений для вариативных шаблонов;
- Раскрытие выражений
if
на стадии компиляции, если заданное внутри условие является константой; - Структурированные привязки, например,
auto [a, b] = getTwoReturnValues()
; - Автоматическое определение типов конструктора шаблонов (например, теперь можно указывать
std::pair(5.0, false)
, явно не задавая типыdouble, bool
); - Inline-переменные, которые можно определять в заголовочных файлах;
- Добавлена библиотека для работы с ФС, основанная на
boost::filesystem
; - Из библиотеки TS I перенесены
std::string_view
,std::optional
иstd::any
; - Добавлен
std::uncaught_exceptions
в качестве заменыstd::uncaught_exception
; - Новые функции вставки
try_emplace
иinsert_or_assign
дляstd::map
иstd::unordered_map
; - Унифицирован доступ к контейнерам
std::size
,std::empty
иstd::data
; - Определены непрерывные итераторы (continuous iterators);
- Удалены устаревшие типы и функции, в том числе
std::auto_ptr
иstd::random_shuffle
; - Представлены параллельно выполняемые варианты алгоритмов STL;
- Добавлены дополнительные математические функции, включая эллиптические интегралы и функции Бесселя;
- Представлены
std::variant
иstd::byte
; - Новые свойства логического оператора:
std::conjunction
,std::disjunction
иstd::negation
.
3К открытий3К показов