C++11
Диалект языка программирования C++C++11 (до утверждения известный как C++0x) — последняя версия стандарта языка C++, принятая в августе 2011 года и опубликованная в сентябре в документе ISO/IEC 14882:2011. C++11 заменит предыдущий стандарт, C++03.
При выборе изменений, которые вошли в стандарт, рабочая группа придерживалась общих принципов дизайна языка:
- сохранение совместимости с предыдущими версиями стандартов и C,
- добавление новых возможностей путем расширения стандартной библиотеки, а не основы языка,
- повышение эффективности, в частности при работе с аппаратным обеспечением,
- решение проблем, возникающих в реальной жизни, но в то же время достаточно широких, а не узкоспециализированных,
- улучшение стиля программирования, безопасности и упрощение процесса изучения языка.
Изменения, затронувшие основу языка:
- добавлены ссылки на временные значения (rvalues — значения на правой стороне присвоения), позволяющие изменять такие значения после их инициализации, и конструкторы переноса.
-
добавлены обобщенные константные выражения, основанные на использовании ключевого слова
constexpr; это слово указывает на то, что функция всегда возвращает значение-константу, и позволяет использовать такую функцию в том же контексте, что и константу. -
определение типа простых данных (plain old data) разбито на два — тривиальный тип (позволяющий статическую инициализацию и использование
memcpy) и тип стандартного размещения (порядок его членов совместим с порядком C). Это позволяет более точно задавать границы совместимости типа с C. - введено понятие внешнего шаблона — способа запретить компилятору инстанцировать (создавать экземпляр класса) шаблон.
-
расширены возможности использования списков инициализации при помощи введения шаблона
std::initializer_list. - введена единая форма инициализации любых объектов.
-
добавлены возможности вывода типов: переменные, инициализирующиеся при объявлении, могут быть объявлены как
auto, а ключевое словоdecltypeпозволяет определять тип переменной на этапе компиляции. -
добавлен синтаксис цикла типа
foreachдля итерирования по элементам коллекции. - добавлены анонимные лямбда-функции.
- добавлен новый синтаксис объявления шаблонов функций, с указанием типа возвращаемого значения после перечисления аргументов функции.
- конструкторы класса могут вызывать другие конструкторы этого же класса, как в Java, C# и D. Объект считается созданным, как только отработал хотя бы один конструктор.
-
добавлена возможность явного указания того, что функция замещает одноименную родительского класса (ключевое слово
override), и того, что функция не может замещаться другой в классе-потомке (ключевое словоfinal). -
новое ключевое слово
nullptr— нулевой указатель. -
строго типизированные перечисления
enum class. -
изменение спецификации парсера так, что
>>интерпретируется как пара закрывающих скобок, а не как оператор правого сдвига. -
ключевое слово
explicitприменимо и к операторам преобразования типов (во избежание неявных преобразований). - синонимы шаблонов.
-
убраны некоторые ограничения на то, объекты каких типов могут входить в
union. - разрешены шаблоны с переменным количеством параметров.
-
поддержка трех новых типов строковых констант: UTF-8 (
u8"..."), UTF-16 (u"...") и UTF-32 (U"..."). - пользовательские константы (возможность трактовать запись как константу некоторого типа в зависимости от ее суффикса).
- многопоточная модель памяти.
- хранение данных, локальных для потока.
-
тип
long long int. -
статические проверки
static_assert. -
sizeofможет работать с членами классов без объектов этого класса. - добавлена возможность управления размещением переменных.
- убраны некоторые сценарии, которые делали невозможным реализацию автоматической сборки мусора.
Изменения библиотеки STL:
- поддержка многопоточности (классы потоков, мьютексов, условных переменных, блокировок и т.д.).
-
кортежи (
tuple) — коллекции разнородных объектов заданных размерностей. -
хеш-таблицы (неупорядоченные ассоциативные контейнеры)
unordered_set,unordered_multiset,unordered_mapиunordered_multimap. -
библиотека регулярных выражений
<regex>. -
“умные” указатели общего назначения: добавлен
unique_ptrи улучшеныshared_ptr и weak_ptr,auto_ptrисключен как устаревший. - расширенные возможности генерации случайных чисел.
Комментарии
]]>blog comments powered by Disqus
]]>