C++11
C++11 — вторая основная версия C++ и самое важное обновление с момента C++98. Было внесено большое количество изменений, как для стандартизации существующих практик, так и для улучшения абстракций, доступных программистам C++.
Перед окончательным утверждением ISO 12 августа 2011 года использовалось название «C++0x», так как ожидалось, что он будет опубликован до 2010 года. Между C++03 и C++11 прошло 8 лет, что стало самым длительным интервалом между версиями на данный момент. С тех пор обновления C++ регулярно происходят каждые 3 года.
В C++11 были объединены следующие функции:
- Из TR1: все из TR1, кроме специальных функций.
- Из Boost: библиотека потоков,
exception_ptr,error_codeиerror_condition, улучшения итераторов (begin,end,next,prev) - Из C: функции преобразования Unicode в стиле C
Основные языковые возможности
-
autoиdecltype - по умолчанию и удаленные функции
-
finalиoverride - тип возвращаемого значения с последующим описанием
- ссылки на rvalues
- конструкторы перемещения и операторы присваивания перемещения
- скопированные перечисления
-
constexprи литеральные типы - инициализация списком
- перенаправляющие и унаследованные конструкторы
- инициализаторы с фигурными скобками или знаком равенства инициализаторы
-
nullptr -
long long - char16_t и char32_t
- псевдонимы типов
- параметрические шаблоны
- обобщенные (нетривиальные) объединения
- обобщенные POD (тривиальные типы и типы со стандартной компоновкой)
- литералы строк Unicode
- пользовательские литералы
- атрибуты
- лямбда-выражения
-
noexceptспецификатор иnoexceptоператор -
alignofиalignas - многопоточная модель памяти
- потоко-локальное хранилище
- интерфейс сборщика мусора (удалено в C++23)
- цикл for по диапазону (на основе библиотеки Boost)
-
static_assert(на основе библиотеки Boost)
Функциональные возможности библиотеки
Заголовки
-
<array> -
<atomic> -
<cfenv> -
<chrono> -
<cinttypes> -
<condition_variable> -
<cstdint> -
<cuchar> -
<forward_list> -
<future> -
<initializer_list> -
<mutex> -
<random> -
<ratio> -
<regex> -
<scoped_allocator> -
<system_error> -
<thread> -
<tuple> -
<typeindex> -
<type_traits> -
<unordered_map> -
<unordered_set>
Функциональные возможности библиотеки
- библиотека поддержки конкуретности
-
emplace()и другое использование ссылок на rvalues во всех частях существующей библиотеки -
std::unique_ptr -
std::move_iterator -
std::initializer_list - состоятельные и скопированные аллокаторы
-
std::forward_list - библиотека chrono
- библиотека ratio
- новые алгоритмы:
-
std::all_of,std::any_of,std::none_of, -
std::find_if_not, -
std::copy_if,std::copy_n, -
std::move,std::move_backward, -
std::random_shuffle,std::shuffle, -
std::is_partitioned,std::partition_copy,std::partition_point, -
std::is_sorted,std::is_sorted_until, -
std::is_heap,std::is_heap_until, -
std::minmax,std::minmax_element, -
std::is_permutation, -
std::iota, -
std::uninitialized_copy_n - facets преобразования Unicode, независимые от локали
-
std::function -
std::exception_ptr -
std::error_codeиstd::error_condition - итераторы улучшения:
- функции преобразования Unicode
Отчеты об ошибках
Поддержка компилятора
Основная статья: Поддержка компилятора C++11
Основные языковые возможности C++11
| Функция C++11 | Статья(и) | GCC | Clang | MSVC | Apple Clang | EDG eccp | Intel C++ | IBM XL C++ | IBM Open XL C++ для AIX | IBM Open XL C++ для z/OS | Sun/Oracle C++ | Embarcadero C++ Builder | Cray | Nvidia HPC C++ (ex PGI)* | Nvidia nvcc | HP aCC | Digital Mars C++ | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| C99 препроцессор | N1653 | 4.3 | Да |
19.0 (2015)* (частично)* 19.26* | Да | 4.1 | 11.1 | 10.1 | 17.1.0 | 1.1.0 | 5.9 | Да | 8.4 | 2015 | 7.0 | A.06.25 | Да | |
static_assert | N1720 | 4.3 | 2.9 | 16.0* | Да | 4.1 | 11.0 | 11.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | 8.52 | |
| Правые угловые скобки | N1757 | 4.3 | Да | 14.0* | Да | 4.1 | 11.0 | 12.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | |||
Расширенные friend объявления | N1791 | 4.7 | 2.9 |
16.0* (частично) 18.0* | Да | 4.1 |
11.1* 12.0 | 11.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | ||
long long | N1811 | Да | Да | 14.0* | Да | Да | Да | Да | 17.1.0 | 1.1.0 | Да | Да | 8.4 | 2015 | 7.0 | Да | Да | |
| Поддержка компилятором свойств типов | N1836 N2518* N2984 N3142 |
4.3* 4.8* 5 | 3.0 |
14.0* (частично)* 19.0 (2015)* | Да | 4.0 | 10.0 | 13.1.3 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 6.16 | |||
auto | N1984 | 4.4 | Да | 16.0* | Да | 3.9 | 11.0 (v0.9) 12.0 | 11.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | ||
| Инициализирующие конструкторы | N1986 | 4.7 | 3.0 | 18.0* | Да | 4.7 | 14.0 | 11.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | ||
extern template | N1987 | 3.3 | Да | 12.0* | Да | 3.9 | 9.0 | 11.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | ||
constexpr | N2235 | 4.6 | 3.1 | 19.0 (2015)* | Да | 4.6 |
13.0* 14.0 |
12.1* 13.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | ||
| Псевдонимы шаблонов | N2258 | 4.7 | 3.0 | 18.0* | Да | 4.2 | 12.1 | 13.1.1* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | ||
char16_t и char32_t | N2249 | 4.4 | 2.9 | 19.0 (2015)* | Да | 4.4 |
12.1* 14.0 | 13.1.1* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | 8.52 | |
alignas | N2341 | 4.8 | 3.0 | 19.0 (2015)* | Да | 4.8 | 15.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.6 | 2015 | 7.0 |
alignof | N2341 | 4.5 | 2.9 | 19.0 (2015)* | Да | 4.8 | 15.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | ||
| Функции по умолчанию и удалённые функции | N2346 | 4.4 | 3.0 | 18.0* | Да | 4.1 | 12.0 | 13.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | |
Типизированные перечисления enum | N2347 | 4.4 | 2.9 | 17.0* | Да | 4.0 | 13.0 | 12.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | |
| Атомарные операции | N2427 | 4.4 | 3.1 | 17.0* | Да | Да | 13.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.14 | Да | 8.4 | 2015 | |||
nullptr | N2431 | 4.6 | 2.9 | 16.0* | Да | 4.2 | 12.1 | 13.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | 8.52 |
| Явные операторы преобразования | N2437 | 4.5 | 3.0 | 18.0* | Да | 4.4 | 13.0 | 12.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | |
| ref-спецификаторы | N2439 | 4.8.1 | 2.9 | 19.0 (2015)* | Да | 4.7 | 14.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |
| Unicode строковые литералы | N2442 | 4.4 | 3.0 | 19.0 (2015)* | Да | 4.7 | 11.0* |
10.1* 13.1.1* | 17.1.0 | 1.1.0 | 5.7 | Да | 8.4 | 2015 | 7.0 | A.06.28 | 8.52 |
| Сырые строковые литералы | N2442 | 4.5 | Да | 18.0* | Да | 4.7 | 14.0 | 13.1.1, except AIX xlC 13.1.3* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | 8.52 |
| Встроенные пространства имён | N2535 | 4.4 | 2.9 | 19.0 (2015)* | Да | 4.5 | 14.0 | 11.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |
| Наследуемые конструкторы | N2540 | 4.8 | 3.3 | 19.0 (2015)* | Да | 4.8 | 15.0 | 13.1.1* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | ||
| Возвращаемые типы функций с постфиксом | N2541 | 4.4 | 2.9 | 16.0* | Да | 4.1 | 12.0 | 12.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | |
| Неограниченные объединения | N2544 | 4.6 | 3.0 | 19.0 (2015)* | Да | 4.6 | 14.0* | 13.1.2* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |
| Многопараметрические шаблоны | N2242 N2555 | 4.3 (N2242) 4.4 | 2.9 | 18.0* | Да | 4.3 (N2242) 4.3 | 12.1 | 11.1 (N2242) | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 |
| Выражение SFINAE | N2634 | 4.4 | 2.9 | 19.14* | Да | 4.2 | 12.1 | 17.1.0 | 1.1.0 | Да | 8.4 | 2015 | 7.0 | ||||
| Локальные и безымянные типы в качестве параметров шаблонов | N2657 | 4.5 | 2.9 | 16.0* | Да | 4.2 | 12.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | |
| Хранение данных для потоков | N2659 | 4.4 (частично) 4.8 | 3.3* |
16.0* (частично) 19.0 (2015)* | Да | 4.8 | 11.1 (частично) 15.0* |
10.1 (частично)* 13.1.2 (частично)* | 17.1.0 | 1.1.0 | 5.9 (частично) | Да | 8.4 | 2015 | 8.52 (частично) | ||
| Динамичная инициализация и завершение с конкурентностью (магические статики) | N2660 | 4.3 | 2.9 | 19.0 (2015)* | Да | Да | 11.1* | 13.1.2* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | A.06.25 | ||
| Сбор мусора и обнаружение утечек памяти на основе достижимости | N2670 | ||||||||||||||||
| Инициализаторы списков | N2672 | 4.4 | 3.1 | 18.0* | Да | 4.5 | 13.0 (частично) 14.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |
| Инициализаторы нестатических данных членов | N2756 | 4.7 | 3.0 | 18.0* | Да | 4.6 | 14.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |
| Атрибуты | N2761 | 4.8 | 3.3 | 19.0 (2015)* | Да | 4.2 | 12.1 | 13.1.1* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | |
Вперед (непрозрачные) enum объявления | N2764 | 4.6 | 3.1 | 17.0* | Да | 4.5 | 11.1 (частично) 14.0 | 12.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | ||
| Пользовательские литералы | N2765 | 4.7 | 3.1 | 19.0 (2015)* | Да | 4.8 | 15.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.14 | Да | 8.4 | 2015 | 7.0 | ||
| Ссылки на значения-переменные | N2118 N2844 CWG1138 | 4.3 (N2118) 4.5 | 2.9 |
16.0* (N2844) 17.0* | Да | 4.5 | 11.1 (N2118) 12.0 (N2844) 14.0 | 12.1 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0* | A.06.25 | |
| Lambda-выражения | N2550 N2658 N2927 | 4.5 | 3.1 |
16.0* (N2658) 17.0* | Да | 4.1 | 12.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | |
| Цикл range-for | N2930 N3271 | 4.6 | 3.0 | 17.0* | Да | 4.5 | 13.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 |
noexcept | N3050 | 4.6 | 3.0 | 19.0 (2015)* | Да | 4.5 | 14.0 | 13.1.1* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |
| По умолчанию перемещаемые специальные члены функции | N3053 | 4.6 | 3.0 | 19.0 (2015)* | Да | 4.5 | 14.0 | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | ||
override и final | N2928 N3206 N3272 | 4.7 | 2.9 |
14.0* (частично) 17.0* | Да | 4.8 | 12.0 (N2928) 14.0 | 13.1.1* | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | ||
decltype | N2343 N3276 | 4.3 (N2343) 4.8.1 | 2.9 | 16.0* | Да | 4.2 (N2343) 4.8 | 11.0 (N2343) 12.0 | 11.1 (N2343) | 17.1.0 | 1.1.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | 8.52 (N2343) |
| Функция C++11 | Документ(ы) | GCC | Clang | MSVC | Apple Clang | EDG eccp | Intel C++ | IBM XL C++ | IBM Open XL C++ для AIX | IBM Open XL C++ для z/OS | Sun/Oracle C++ | Embarcadero C++ Builder | Cray | Nvidia HPC C++ (ex PGI)* | Nvidia nvcc | HP aCC | Digital Mars C++ |
|---|
Функции библиотек C++11
| Функция C++11 | Документ(ы) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ для AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* | |
|---|---|---|---|---|---|---|---|---|---|
| Свойства типов | N1836 N2240 N2244 N2255 N2342 N2984 N3142 |
4.3* 4.8* 5 | 3.0 |
14.0* (частично)* 19.0 (2015)* | Да | 17.1.0 | 5.13 | Да | |
| Сбор мусора и обнаружение утечек на основе достижимости (поддержка библиотек) | N2670 | 6 (бездействующий)* | 3.4 (бездействующий)* |
19.0 (2015)* (бездействующий)* | Да (бездействующий)* | 17.1.0 | |||
| Деньги, время и манипуляторы hexfloat I/O | N2071 N2072 | 5 | 3.8 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | ||
Запрещение COW (copy-on-write) std::basic_string | N2668 | 5 | Да | Да | Да | 17.1.0 | Да | ||
| Библиотека регулярных выражений | N1429 | 4.9 | ? | ? | Да | 17.1.0 | |||
| Функция C++11 | Документ(ы) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ для AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* |
* - наведите указатель на ячейку с звёздочкой *, чтобы увидеть дополнительные всплывающие заметки.
DRnn - число nn после "DR" обозначает целевую версию C++, к которой применяется отчёт об ошибке, например, DR20 → C++20.
Внешние ссылки
| Примеры C++11 |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/11