C++14
C++14 — это незначительная версия после основной версии C++11, содержащая в основном незначительные улучшения и исправления ошибок. Её утверждение было объявлено 18 августа 2014 года. Выпущена 15 декабря 2014 года.
До её утверждения, C++1y иногда использовался для обозначения её выпуска в 2010-х годах.
Новые возможности языка
- шаблоны переменных
- обобщённые лямбда-выражения
- захват лямбда-выражений с инициализацией
- исключение new/delete
- смягчённые ограничения на constexpr-функции
- двоичные литералы
- разделители цифр
- вывод типа возвращаемого значения для функций
- агрегатные классы с инициализаторами по умолчанию для нестатических членов.
Новые возможности библиотеки
-
std::make_unique -
std::shared_timed_mutexиstd::shared_lock -
std::integer_sequence -
std::exchange -
std::quoted - и многочисленные небольшие улучшения существующих средств библиотеки, такие как
- перегрузки для некоторых алгоритмов с двумя диапазонами
- псевдонимы типов для признаков типов
- пользовательские литералы для
basic_string,durationиcomplex - и т. д.
Отчёты об ошибках
| Отчёты об ошибках, исправленные в C++14 (276 основных, 158 библиотечных) |
|---|
Поддержка компилятора
Основная статья: Поддержка компиляторов C++14
Основные языковые возможности C++14
| Функция C++14 | Статья(и) | 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 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Изменённая формулировка для контекстуальных преобразований | N3323 | 4.9 | 3.4 | 18.0* | Да | 4.9 | 16.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.15 | 10.3 | 8.6 | 16.1 | 9.0 | |
| Двоичные литералы | N3472 | 4.3 (GNU) 4.9 | 2.9 | 19.0 (2015)* | Да | 4.10 | 11.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.14 | 10.3 | 8.6 | 2015 | 9.0 | |
decltype(auto), Вывод типа для обычных функций | N3638 | 4.8 (частично)* 4.9 | 3.3 (частично)* 3.4 | 19.0 (2015)* | Да | 4.9 | 15.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.15 | 10.3 | 8.6 | 16.1 | 9.0 | |
| Инициализация/обобщение захватов лямбда-выражений (init-capture) | N3648 | 4.5 (частично) 4.9 | 3.4 | 19.0 (2015)* | Да | 4.10 | 15.0 | 16.1.1* | 17.1.0 | 1.1.0 | 5.15 | 10.3 | 8.6 | 16.1 | 9.0 | |
| Обобщённые лямбда-выражения | N3649 | 4.9 | 3.4 | 19.0 (2015)* | Да | 4.10 | 16.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.15 | 10.3 | 8.6 | 16.1 | 9.0 | |
| Переменные-шаблоны | N3651 | 5 | 3.4 | 19.0 (Update 2)* | Да | 4.11 | 17.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.15 | 10.3 | 8.6 | 17.4 | 9.0 | |
| Расширенный constexpr | N3652 | 5 | 3.4 | 19.10* | Да | 4.11 | 17.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.15 | 10.3 | 8.6 | 17.4 | 9.0 | |
| Агрегаты с инициализаторами членов по умолчанию | N3653 | 5 | 3.3 | 19.10* | Да | 4.9 | 16.0 | 16.1.1* | 17.1.0 | 1.1.0 | 5.14 | 10.3 | 8.6 | 16.1 | 9.0 | |
| Пропуск/расширение выделения памяти | N3664 | Нет данных | 3.4 | Нет данных | Да | Нет данных | Нет данных | Нет данных | 17.1.0 | 1.1.0 | Нет данных | 10.3 | 8.6 | 17.4 | Нет данных | |
Атрибут [[deprecated]] | N3760 | 4.9 | 3.4 | 19.0 (2015)* | Да | 4.9 |
15.0* 16.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.14 | 10.3 | 8.6 | 16.1 | 9.0 | |
| Выделение с размером | N3778 | 5 | 3.4 | 19.0 (2015)* | Да | 4.10.1 | 17.0 | 16.1.1* | 17.1.0 | 1.1.0 | 5.14 | 10.3 | 8.6 | 16.1 | ||
| Одиночная кавычка как разделитель цифр | N3781 | 4.9 | 3.4 | 19.0 (2015)* | Да | 4.10 | 16.0 | 13.1.2* | 17.1.0 | 1.1.0 | 5.14 | 10.3 | 8.6 | 2015 | 9.0 | |
| Функция C++14 | Статья(и) | 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 |
Особенности библиотеки C++14
| Функция C++14 | Статья(и) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ для AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* | |
|---|---|---|---|---|---|---|---|---|---|
constexpr для <complex> | N3302 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
| Прозрачные функторы оператора | N3421 | 4.9 | 3.4 | 18.0* | Да | 17.1.0 | 5.15 | 10.3 | |
std::result_of и SFINAE | N3462 | 5 | Да | 19.0 (Обновление 2)* | Да | 17.1.0 | 5.15 | 10.3 | |
constexpr для <chrono> | N3469 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
constexpr для <array> | N3470 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
constexpr для <initializer_list>, <utility> и <tuple> | N3471 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
Улучшенное std::integral_constant | N3545 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
Пользовательские литералы для <chrono> и <string> | N3642 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
| Нулевые итераторы вперёд | N3644 | 5 (частично) 10 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
std::quoted | N3654 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
std::make_unique | N3656 | 4.9 | 3.4 | 18.0* | Да | 17.1.0 | 5.15 | 10.3 | |
| Гетерогенный ассоциативный поиск | N3657 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
std::integer_sequence | N3658 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
std::shared_timed_mutex | N3659 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
std::exchange | N3668 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
исправление constexpr методов без const | N3669 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
std::get<T>() | N3670 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
Двухдиапазонные std::equal, std::is_permutation, std::mismatch | N3671 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
| Функция C++14 | Статья(и) |
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++14 |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/14