Объявлено о готовности международного стандарта C++14

Объявлено о готовности нового международного стандарта для языка программирования Си++ — ISO/IEC 14882:2014(E), известного также под именем C++14. В настоящее время стандарт прошёл утверждение и перешёл на стадию подготовки документа к публикации, на которой будет проведена работа по редакторской правке орфографических ошибок и опечаток. Новый стандарт не содержит кардинальных изменений и рассматривается в качестве корректирующего расширения стандарта C++11, предлагающего ряд улучшений и дополнений. C++14 примечателен самым коротким сроком подготовки спецификации (C++11 развивался более 10 лет) и обеспечением поддержки в компиляторах к моменту фактического выпуска стандарта (на обеспечение поддержки C++11 в популярных компиляторах было потрачено несколько лет). В частности, полноценная поддержка C++14 уже реализована в LLVM/Clang 3.4, а частичная поддержка C++14 доступна для пользователей GCC, IBM C++ и Microsoft C++.

Основные новшества:

Улучшения в языке: Возможность указания чисел в двоичном представлении и наглядного отделения цифр в числе, например, теперь можно указать «a = 0b101010;» или «a = 0b100'0001;»; Поддержка автоматического определения типа, возвращаемого любой функцией, в которой используется несколько выражений return, содержащих значение одного типа. В С++ определение типов было ограничено лямбда-функциями, содержащими только один вызов return; Реализован дополнительный синтаксис определения типа — decltype (auto), который можно использовать для определения результирующего типа возвращаемого функцией значения (например, «string lookup1(); decltype (auto) look_up_a_string_1() { return lookup1(); }»); Поддержка захвата переменных лямбда-функций с возможностью захватывать переменные с перемещением значения и объявлять произвольные локальные переменные в лямбда-объекте; Возможность указания типа «auto» для лямбда-выражений, позволяющего вынести определение типа на плечи компилятора по аналогии с вычислением типов переменных, объявленных с указанием ключевого слова «auto»; Поддержка задания шаблонов для переменных, в дополнение к ранее поддерживаемым шаблонам для функций и классов; Расширение числа возможностей, которые можно использовать внутри функций constexpr. В частности, C++14 позволяет объявлять локальные переменные и использовать выражения if, switch, for, while, do-while, допускает мутацию объектов; Добавлен атрибут »[[deprecated]]», при помощи которого можно пометить элемент устаревшим, после чего останется возможность использования этого элемента, но будут выводиться предупреждения, что в будущем его поддержка может быть прекращена. Улучшения в стандартной библиотеке: Поддержка разделяемых мьютексов (shared_mutex) и разделяемых блокировок (shared_lock); Возможность определения пользователем собственных литералов для std: types, которые не могут использоваться в стандартной библиотеке. Из добавленных стандартных литералов отмечаются «s» (для строковых типов std: basic_string), «h», «min», «s», «ms», «us» и «ns» (для временных интервалов std: chrono: duration); Поддержка выражения make_unique для объектов unique_ptr, похожего по сути на make_shared, но без добавления оптимизаций; Добавлены псевдонимы »*_t» для трансформации типов, позволяющие уйти от использования многословных объявлений c typename (remove_reference_t вместо «typename remove_reference», make_unsigned_t вместо typename make_unsigned и т.п.); Возможности обращения к элементам кортежа по типу, при условии, что в кортеже содержится только один элемент данного типа.

©  OpenNet