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
]]>