C++14
C++14 — это минорная версия, выпущенная после мажорной версии C++11; она включает главным образом небольшие улучшения и исправления ошибок. Об утверждении стандарта было объявлено 18 августа 2014 года. Он был выпущен 15 декабря 2014 года.
До утверждения для обозначения его выпуска в 2010-х годах иногда использовалось название C++1y.
Новые возможности языка
- шаблоны переменных
- обобщённые лямбда-выражения
- захват с инициализацией в лямбда-выражениях
- устранение пар new/delete
- смягчение ограничений для функций constexpr
- двоичные литералы
- разделители разрядов
- выведение возвращаемого типа функций
- агрегатные классы с инициализаторами нестатических членов по умолчанию.
Новые возможности библиотеки
std::make_unique-
std::shared_timed_mutexиstd::shared_lock std::integer_sequencestd::exchangestd::quoted- а также множество небольших улучшений существующих средств библиотеки, таких как
- перегрузки некоторых алгоритмов с двумя диапазонами
- версии признаков типов в виде псевдонимов типов
- определяемые пользователем литералы для
basic_string,durationиcomplex - и т. д.
Отчёты об ошибках
| Отчёты об ошибках, исправленные в C++14 (276 в ядре, 158 в библиотеке) |
|---|
Поддержка компиляторами
Основные возможности языка C++14
| Возможность C++14 | Документ(ы) |
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++ | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Изменённые формулировки для контекстных преобразований | N3323 | 4.9 | 3.4 | 18.0* | Да | 4.9 | 16.0 | 16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.15 | |
| Двоичные литералы (FTM)* | N3472 |
4.3* 4.9 | 2.9 | 19.0 (2015)* | Да | 4.10 | 11.0 | 2015 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | |
decltype(auto), вывод типа возвращаемого значения для обычных функций (FTM)* (FTM)* | N3638 | 4.8 (частично)* 4.9 | 3.3 (только частично)* 3.4 | 19.0 (2015)* | Да | 4.9 | 15.0 | 16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.15 | |
| Инициализированный/обобщённый захват лямбда-выражений (init-capture) (FTM)* | N3648 | 4.5 (частично) 4.9 | 3.4 | 19.0 (2015)* | Да | 4.10 | 15.0 | 16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 16.1.1* | 5.15 | |
| Обобщённые лямбда-выражения (FTM)* | N3649 | 4.9 | 3.4 | 19.0 (2015)* | Да | 4.10 | 16.0 | 16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.15 | |
| Шаблоны переменных (FTM)* | N3651 | 5 | 3.4 | 19.0 (Update 2)* | Да | 4.11 | 17.0 | 17.4 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.15 | |
| Расширенный constexpr (FTM)* | N3652 | 5 | 3.4 | 19.10* | Да | 4.11 | 17.0 | 17.4 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.15 | |
| Агрегаты с инициализаторами членов по умолчанию (FTM)* | N3653 | 5 | 3.3 | 19.10* | Да | 4.9 | 16.0 | 16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 16.1.1* | 5.14 | |
| Пропуск/расширение выделения памяти | N3664 | Н/Д | 3.4 | Н/Д | Да | Н/Д | Н/Д | 17.4 | Н/Д | 8.6 | 10.3 | 17.1.0 | 1.1.0 | Н/Д | Н/Д | |
Атрибут [[deprecated]] | N3760 | 4.9 | 3.4 | 19.0 (2015)* | Да | 4.9 |
15.0* 16.0 | 16.1 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | |
| Освобождение памяти с учётом размера (FTM)* | N3778 | 5 | 3.4 | 19.0 (2015)* | Да | 4.10.1 | 17.0 | 16.1 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 16.1.1* | 5.14 | ||
| Одинарная кавычка в качестве разделителя цифр | N3781 | 4.9 | 3.4 | 19.0 (2015)* | Да | 4.10 | 16.0 | 2015 | 9.0 | 8.6 | 10.3 | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | |
| Возможность C++14 | Документ(ы) |
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++ |
Возможности библиотеки C++14
| Возможность C++14 | Предложение(я) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ for AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* | |
|---|---|---|---|---|---|---|---|---|---|
constexpr для <complex> | N3302 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
| Прозрачные функциональные объекты операторов (FTM)* | N3421 | 4.9 | 3.4 | 18.0* | Да | 17.1.0 | 5.15 | 10.3 | |
std::result_of и SFINAE (FTM)* | N3462 | 5 | Да | 19.0 (Update 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 (FTM)* | N3545 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
Литералы, определяемые пользователем для <chrono> и <string> (FTM)* (FTM)* | N3642 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
| Нулевые прямые итераторы (FTM)* | N3644 | 5 (частично) 10 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
std::quoted (FTM)* | N3654 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
std::make_unique (FTM)* | N3656 | 4.9 | 3.4 | 18.0* | Да | 17.1.0 | 5.15 | 10.3 | |
| Гетерогенный поиск в ассоциативных контейнерах (FTM)* | N3657 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
std::integer_sequence (FTM)* | 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 (FTM)* | 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>() (FTM)* | N3670 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
Двухдиапазонные std::equal, std::is_permutation, std::mismatch (FTM)* | N3671 | 5 | 3.4 | 19.0 (2015)* | Да | 17.1.0 | 5.15 | 10.3 | |
| Шаблоны псевдонимов для трейтов преобразования типов (FTM)* | N3655 | 4.9 | 3.4 | 18.0* | Да | ||||
Литералы, определяемые пользователем, для std::complex (FTM)* | N3779 | 4.9 | 3.4 | 19.0 (2015)* | Да | ||||
DR11: std::is_null_pointer (FTM)* | LWG2247 | 4.9 | 3.4 | 19.0 (2015)* | |||||
std::is_final (FTM)* | LWG2112 | 5 | 3.4 | 19.0 (2015)* | |||||
std::make_reverse_iterator (FTM)* | LWG2285 | 5 | 3.4 | 19.0 (2015)* | |||||
std::shared_timed_mutex (FTM)* | N3891 | 4.9 | 3.5 | 19.0 (2015)* | Да | ||||
std::tuple_element_t (FTM)* | N3887 | 4.10 | 3.5 | 19.0 (2015)* | Да | ||||
| Возможность C++14 | Предложение(я) |
GCC libstdc++ |
Clang libc++ |
MSVC STL |
Apple Clang* |
IBM Open XL C/C++ for AIX* |
Sun/Oracle C++* |
Embarcadero C++ Builder* |
* — наведите курсор на ячейку, отмеченную звездочкой *, чтобы увидеть дополнительные примечания во всплывающей подсказке.
DRnn — число nn после «DR» обозначает целевую редакцию C++, к которой применяется отчет об ошибке; например, DR20 → C++20.
Внешние ссылки
| 1. | C++14 — Википедия |
| 2. | Рабочие примеры C++14 |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/14