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
- завершающий тип возврата
- rvalue-ссылки
- конструкторы перемещения и операторы перемещающего присваивания
- ограниченные перечисления
- 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()и другие использования ссылок на rvalue во всех частях существующей библиотеки - std::unique_ptr
- std::move_iterator
- std::initializer_list
- stateful и scoped аллокаторы
- 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
- Фасеты преобразования Unicode
- std::function
- std::exception_ptr
- std::error_code и std::error_condition
- Улучшения итераторов:
| Этот раздел не завершён |
Отчеты о дефектах
Поддержка компиляторами
Основные возможности языка C++11
|
Функция C++11
|
Документ(ы)
|
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
Embarcadero C++ Builder
|
IBM Open XL C++ for AIX
|
IBM Open XL C++ for z/OS
|
IBM XL C++
|
Sun/Oracle C++
|
HP aCC
|
Digital Mars C++
|
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| C99 препроцессор | N1653 | 4.3 | Да |
19.0 (2015)*
(частично)*
19.26* |
Да | 4.1 | 11.1 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 10.1 | 5.9 | A.06.25 | Да | |
| static_assert ( FTM ) * | N1720 | 4.3 | 2.9 | 16.0* | Да | 4.1 | 11.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | 8.52 | |
| Прямые угловые скобки | N1757 | 4.3 | Да | 14.0* | Да | 4.1 | 11.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 12.1 | 5.13 | |||
| Расширенные friend объявления | N1791 | 4.7 | 2.9 | 16.0* | Да | 4.1 |
11.1 (частично)
12.0 |
2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
long long
|
N1811 | Да | Да | 14.0* | Да | Да | Да | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | Да | Да | Да | Да | |
| auto | N1984 | 4.4 | Да | 16.0* | Да | 3.9 |
11.0
(частично)*
12.0 |
2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
| Делегирующие конструкторы ( FTM ) * | N1986 | 4.7 | 3.0 | 18.0* | Да | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.28 | ||
| extern template | N1987 | 3.3 | Да | 12.0* | Да | 3.9 | 9.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
| constexpr ( FTM ) * | N2235 | 4.6 | 3.1 | 19.0 (2015)* | Да | 4.6 |
13.0 (частично)
14.0 |
2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 |
12.1 (частично)
13.1 |
5.13 | A.06.28 | ||
char16_t
и
char32_t
(
FTM
)
*
|
N2249 | 4.4 | 2.9 | 19.0 (2015)* | Да | 4.4 |
12.1 (частично)*
14.0 |
2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | 8.52 | |
| Поддержка компиляторами type traits . N2255* |
N2255
N2984 N3142 |
4.3 (частично)*
4.8 (частично)* 5 |
3.0 |
14.0*
(частично)* 19.0 (2015)* |
Да | 4.0 | 10.0 | 2015 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.3 | 5.13 | 6.16 | |||
| Шаблонные псевдонимы ( FTM ) * | N2258 | 4.7 | 3.0 | 18.0* | Да | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | ||
| alignas | N2341 | 4.8 | 3.0 | 19.0 (2015)* | Да | 4.8 | 15.0 | 2015 | 7.0 | 8.6 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | |||
| alignof | N2341 | 4.5 | 2.9 | 19.0 (2015)* | Да | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | |||
| Функции по умолчанию и удалённые функции | N2346 | 4.4 | 3.0 | 18.0* | Да | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1 | 5.13 | A.06.25 | ||
Сильно типизированные
enum
|
N2347 | 4.4 | 2.9 |
16.0*
(частично)
17.0* |
Да | 4.0 | 13.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.25 | ||
| Атомарные операции | N2427 | 4.4 | 3.1 | 17.0* | Да | Да | 13.0 | 2015 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | ||||
| nullptr | N2431 | 4.6 | 2.9 | 16.0* | Да | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1 | 5.13 | A.06.27 | 8.52 | |
| Явные операторы преобразования | N2437 | 4.5 | 3.0 | 18.0* | Да | 4.4 | 13.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.27 | ||
| ref-qualifiers ( FTM ) * | N2439 | 4.8.1 | 2.9 | 19.0 (2015)* | Да | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| Юникод строковые литералы ( FTM ) * | N2442 | 4.4 | 3.0 | 19.0 (2015)* | Да | 4.7 | 11.0* | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 |
10.1*
13.1.1* |
5.7 | A.06.28 | 8.52 | |
| Необработанные строковые литералы ( FTM ) * | N2442 | 4.5 | Да | 18.0* | Да | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.1, кроме AIX xlC 13.1.3* | 5.13 | A.06.28 | 8.52 | |
| Встроенные пространства имён | N2535 | 4.4 | 2.9 | 19.0 (2015)* | Да | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.28 | ||
| Наследование конструкторов ( FTM ) * | N2540 | 4.8 | 3.3 | 19.0 (2015)* | Да | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | |||
| Возвращаемые типы функций в конце объявления | N2541 | 4.4 | 2.9 | 16.0* | Да | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.27 | ||
| Неограниченные union s | N2544 | 4.6 | 3.0 | 19.0 (2015)* | Да | 4.6 | 14.0* | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| Вариативные шаблоны ( FTM ) * |
N2242
N2555 |
4.3
(частично)*
4.4 |
2.9 | 18.0* | Да |
4.3
(частично)*
4.3 |
12.1 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 11.1 (частично)* | 5.13 | A.06.27 | ||
| Expression SFINAE | N2634 | 4.4 | 2.9 | 19.14* | Да | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | |||||
| Локальные и безымянные типы в качестве параметров шаблонов | N2657 | 4.5 | 2.9 | 16.0* | Да | 4.2 | 12.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.27 | ||
| Потоковое локальное хранилище | N2659 |
4.4 (частично)
4.8 |
3.3* |
16.0*
(частично)
19.0 (2015)* |
Да | 4.8 |
11.1 (частично)
15.0* |
2015 | 8.4 | Да | 17.1.0 | 1.1.0 |
10.1 (частично)*
13.1.2 (частично)* |
5.9 (частично) | 8.52 (частично) | |||
| Динамическая инициализация и уничтожение с параллелизмом ( magic statics ) ( FTM ) * | N2660 | 4.3 | 2.9 | 19.0 (2015)* | Да | Да | 11.1* | 2015 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.25 | |||
| Сборка мусора и обнаружение утечек на основе достижимости | N2670 | |||||||||||||||||
| Списки инициализации ( FTM ) * | N2672 | 4.4 | 3.1 | 18.0* | Да | 4.5 |
13.0 (частично)
14.0 |
2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| Инициализаторы нестатических членов данных ( FTM ) * | N2756 | 4.7 | 3.0 | 18.0* | Да | 4.6 | 14.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
Атрибуты
,
[[
noreturn
]]
(
FTM
)
*
|
N2761 | 4.8 | 3.3 | 19.0 (2015)* | Да | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | ||
[[
carries_dependency
]]
|
N2556
N2643 |
3.3* | 17.1.0* | |||||||||||||||
Прямые (непрозрачные)
enum
объявления
|
N2764 | 4.6 | 3.1 | 17.0* | Да | 4.5 |
11.1 (частично)
14.0 |
2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 12.1 | 5.13 | |||
| Пользовательские литералы ( FTM ) * | N2765 | 4.7 | 3.1 | 19.0 (2015)* | Да | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | |||
| Ссылки на rvalue ( FTM ) * |
N2118
N2844 CWG1138 |
4.3
(частично)*
4.5 |
2.9 |
16.0*
(частично)*
17.0* |
Да | 4.5 |
11.1
(частично)*
12.0 (частично)* 14.0 |
2015 | 7.0* | 8.4 | Да | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.25 | ||
| Лямбда-выражения ( FTM ) * |
N2550
N2658 N2927 |
4.5 | 3.1 |
16.0*
(частично)*
17.0* |
Да | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.25 | ||
| Цикл for по диапазону ( FTM ) * |
N2930
N3271 |
4.6 | 3.0 | 17.0* | Да | 4.5 | 13.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| noexcept | N3050 | 4.6 | 3.0 | 19.0 (2015)* | Да | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.28 | ||
| Умолчанные перемещающие специальные функции-члены | N3053 | 4.6 | 3.0 | 19.0 (2015)* | Да | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 5.13 | A.06.25 | |||
| override и final |
N2928
N3206 N3272 |
4.7 | 2.9 |
14.0*
(частично)
17.0* |
Да | 4.8 |
12.0
(частично)*
14.0 |
2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | |||
| decltype ( FTM ) * |
N2343
N3276 |
4.3
(частично)*
4.8.1 |
2.9 |
16.0*
(частично)*
17.0* |
Да |
4.2
(частично)*
4.8 |
11.0
(частично)*
12.0 |
2015 | 7.0 | 8.4 | Да | 17.1.0 | 1.1.0 | 11.1 (частично)* | 5.13 | A.06.25 | 8.52 (частично)* | |
|
Функциональность C++11 |
Документ(ы) |
GCC
|
Clang
|
MSVC
|
Apple Clang
|
EDG eccp
|
Intel C++
|
Nvidia HPC C++ (ex PGI)*
|
Nvidia nvcc
|
Cray
|
Embarcadero C++ Builder
|
IBM Open XL C++ for AIX
|
IBM Open XL C++ for z/OS
|
IBM XL C++
|
Sun/Oracle C++
|
HP aCC
|
Digital Mars C++
|
Функции библиотеки C++11
|
Функция C++11
|
Документ(ы)
|
GCC libstdc++
|
Clang libc++
|
MSVC STL
|
Apple Clang*
|
IBM Open XL C/C++ for AIX*
|
Sun/Oracle C++*
|
Embarcadero C++ Builder*
|
|
|---|---|---|---|---|---|---|---|---|---|
| Библиотека регулярных выражений | N1429 | 4.9 | 2.8 | Да | Да | 17.1.0 | |||
| Type traits . N1836* |
N1836
N2240 N2244 N2255 N2342 N2984 N3142 |
4.3 (частично)*
4.8 (частично)* 5 |
3.0 |
14.0*
(частично)* 19.0 (2015)* |
Да | 17.1.0 | 5.13 | Да | |
Функции-члены
cbegin
,
cend
,
crbegin
, и
crend
контейнеров
|
N1913
LWG1192 |
4.3
(частично)*
4.5 |
Да* | 16.0* | Да* | 17.1.0 | |||
| Сборка мусора и обнаружение утечек на основе достижимости ( поддержка библиотеки ) | N2670 |
6
(no-op)* |
3.4
(no-op)* |
19.0 (2015)*
(no-op)* |
Да
(no-op)* |
17.1.0 | |||
| Манипуляторы ввода-вывода для денег, времени и шестнадцатеричных чисел с плавающей точкой |
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 | Да | ||
|
Функция C++11 |
Документ(ы) |
GCC libstdc++
|
Clang libc++
|
MSVC STL
|
Apple Clang*
|
IBM Open XL C/C++ for AIX*
|
Sun/Oracle C++*
|
Embarcadero C++ Builder*
|
*
- наведите курсор на ячейку, отмеченную звездочкой
*
, чтобы увидеть дополнительные всплывающие примечания.
DR
nn
- число
nn
после "DR" обозначает целевую ревизию C++, к которой применяется Отчет о Дефектах, например, DR20 → C++20.
Внешние ссылки
| 1. | C++11 - Википедия |
| 2. | Рабочие примеры C++11 |