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: Функции преобразования Юникода в стиле C
Основные возможности языка
- auto и decltype
- функции default и delete
- final и override
- конечный возвращаемый тип
- ссылки на правостороннее значение
- конструкторы перемещения и операторы присваивания перемещением
- перечисления с ограниченной областью видимости
- constexpr и литеральные типы
- список инициализации
- делегирующий и наследуемый конструкторы
- инициализаторы фигурными скобками или знаком присваивания
- nullptr
- long long
char16_tиchar32_t- псевдонимы типов
- вариативные шаблоны
- обобщённые (нетривиальные) объединения
- обобщённые POD (тривиальные типы и типы стандартного выравнивания)
- строковые литералы Юникода
- определяемые пользователем литералы
- атрибуты
- лямбда-выражения
- спецификатор noexcept и оператор noexcept
- alignof и alignas
- многопоточная модель памяти
- класс памяти thread-local
- интерфейс GC (удалено в 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
- аллокаторы с сохранением состояния и с ограниченной областью видимости
- std::forward_list
- библиотека хронометрии
- рациональная библиотека
- новые алгоритмы:
- 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
- Фасеты преобразования Юникода
- библиотека потоков
- std::function
- std::exception_ptr
- std::error_code и std::error_condition
- улучшения итераторов:
- std::begin
- std::end
- std::next
- std::prev
| Этот раздел не завершён |
Отчёты о дефектах
Поддержка компиляторами
Основная Статья: Поддержка компиляторами C++
Основные возможности языка 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++ (бывшая PGI)* |
Nvidia nvcc |
HP aCC |
Digital Mars C++ |
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| C99 препроцессор | N1653 | 4.3 | Да | 19.0 (2015)* (частично)* 19.26* |
Да | 4.1 | 11.1 | 5.9 | Да | 8.4 | 2015 | 7.0 | A.06.25 | Да | ||||
static_assert
|
N1720 | 4.3 | 2.9 | 16.0* | Да | 4.1 | 11.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | 8.52 | ||||
| Правые угловые скобки | N1757 | 4.3 | Да | 14.0* | Да | 4.1 | 11.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | ||||||
Расширенные friend объявления
|
N1791 | 4.7 | 2.9 | 16.0* (частично) 18.0* |
Да | 4.1 | 11.1* 12.0 |
5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | |||||
long long
|
N1811 | Да | Да | 14.0* | Да | Да | Да | Да | Да | 8.4 | 2015 | 7.0 | Да | Да | ||||
| Поддержка компилятором свойств типа | N1836 | 4.3 | 3.0 | 14.0* | Да | 4.0 | 10.0 | 5.13 | Да | 8.4 | 2015 | 6.16 | ||||||
| auto | N1984 | 4.4 | Да | 16.0* | Да | 3.9 | 11.0 (v0.9) 12.0 |
5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | |||||
| Делегирование конструкторов | N1986 | 4.7 | 3.0 | 18.0* | Да | 4.7 | 14.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |||||
внешний шаблон
|
N1987 | 3.3 | Да | 12.0* | Да | 3.9 | 9.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 |
5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |||||
| Псевдонимы шаблонов | N2258 | 4.7 | 3.0 | 18.0* | Да | 4.2 | 12.1 | 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 |
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 | 5.13 | Да | 8.6 | 2015 | 7.0 | ||||||
| alignof | N2341 | 4.5 | 2.9 | 19.0 (2015)* | Да | 4.8 | 15.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | ||||||
| Функции default и delete | N2346 | 4.4 | 3.0 | 18.0* | Да | 4.1 | 12.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | |||||
Строго типизированный enum
|
N2347 | 4.4 | 2.9 | 17.0* | Да | 4.0 | 13.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | |||||
| Атомарные операции | N2427 | 4.4 | 3.1 | 17.0* | Да | Да | 13.0 | 5.14 | Да | 8.4 | 2015 | |||||||
nullptr
|
N2431 | 4.6 | 2.9 | 16.0* | Да | 4.2 | 12.1 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | 8.52 | ||||
| Явные операторы преобразования | N2437 | 4.5 | 3.0 | 18.0* | Да | 4.4 | 13.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | |||||
| ссылочные квалификаторы | N2439 | 4.8.1 | 2.9 | 19.0 (2015)* | Да | 4.7 | 14.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |||||
| Строковые литералы Юникода | N2442 | 4.4 | 3.0 | 19.0 (2015)* | Да | 4.7 | 11.0* | 5.7 | Да | 8.4 | 2015 | 7.0 | A.06.28 | 8.52 | ||||
| Сырые строковые литералы | N2442 | 4.5 | Да | 18.0* | Да | 4.7 | 14.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 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |||||
| Наследование конструкторов | N2540 | 4.8 | 3.3 | 19.0 (2015)* | Да | 4.8 | 15.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | ||||||
| Типы возвращаемых значений конечной функции | N2541 | 4.4 | 2.9 | 16.0* | Да | 4.1 | 12.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | |||||
| Неограниченные объединения | N2544 | 4.6 | 3.0 | 19.0 (2015)* | Да | 4.6 | 14.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 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | |||||
| Выражение SFINAE | N2634 | 4.4 | 2.9 | 19.14* | Да | 4.2 | 12.1 | Да | 8.4 | 2015 | 7.0 | |||||||
| Локальные и безымянные типы как параметры шаблона | N2657 | 4.5 | 2.9 | 16.0* | Да | 4.2 | 12.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* |
5.9 (частично) | Да | 8.4 | 2015 | 8.52 (частично) | ||||||
| Динамическая инициализация и уничтожение с параллелизмом (магическая статика) | N2660 | 4.3 | 2.9 | 19.0 (2015)* | Да | Да | 11.1* | 5.13 | Да | 8.4 | 2015 | A.06.25 | ||||||
| Сборка Мусора и Обнаружение Утечек на Основе Доступности (поддержка библиотеки) | N2670 | |||||||||||||||||
| Списки инициализаторов | N2672 | 4.4 | 3.1 | 18.0* | Да | 4.5 | 13.0 (частично) 14.0 |
5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |||||
| Инициализаторы нестатических элементов данных | N2756 | 4.7 | 3.0 | 18.0* | Да | 4.6 | 14.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |||||
| Атрибуты | N2761 | 4.8 | 3.3 | 19.0 (2015)* | Да | 4.2 | 12.1 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.27 | |||||
Предобъявления (непрозрачного) enum
|
N2764 | 4.6 | 3.1 | 17.0* | Да | 4.5 | 11.1 (partial) 14.0 |
5.13 | Да | 8.4 | 2015 | 7.0 | ||||||
| Пользовательские литералы | N2765 | 4.7 | 3.1 | 19.0 (2015)* | Да | 4.8 | 15.0 | 5.14 | Да | 8.4 | 2015 | 7.0 | ||||||
| Ссылки rvalue | 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 |
5.13 | Да | 8.4 | 2015 | 7.0* | A.06.25 | |||||
| Лямбда-выражения | N2550 N2658 N2927 |
4.5 | 3.1 | 16.0* (N2658) 17.0* |
Да | 4.1 | 12.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.25 | |||||
| Диапазонный цикл for | N2930 N3271 |
4.6 | 3.0 | 17.0* | Да | 4.5 | 13.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |||||
noexcept
|
N3050 | 4.6 | 3.0 | 19.0 (2015)* | Да | 4.5 | 14.0 | 5.13 | Да | 8.4 | 2015 | 7.0 | A.06.28 | |||||
| Специальные функции элементы перемещения по умолчанию | N3053 | 4.6 | 3.0 | 19.0 (2015)* | Да | 4.5 | 14.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 |
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 |
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++ (бывшая 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 | 4.3 | 3.0 | 14.0* | Да | 5.13 | Да | ||
| Сборка Мусора и Обнаружение Утечек на Основе Доступности (поддержка библиотеки) | N2670 | 6 (no-op) |
3.4 (no-op) |
19.0 (2015)* (no-op) |
Да (no-op) |
||||
| Денежные, Временные и шестнадцатеричные с плавающей запятой манипуляторы ввода/вывода | N2071 N2072 |
5 | 3.8 | 19.0 (2015)* | Да | 5.15 | |||
| Запрещение COW (copy-on-write – копирование при записи) std::basic_string | N2668 | 5 | Да | Да | Да | Да | |||
| 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 |