C++14
来自 cppreference.cn
< cpp
C++14 是 C++11 主要版本之后的一个次要版本,主要特性是一些小的改进和缺陷修复。它于2014年8月18日宣布批准,并于2014年12月15日发布。
在其批准之前,C++1y 有时用于表示它将在2010年代发布。
本节不完整 |
目录 |
[编辑] 新语言特性
- 变量模板
- 泛型 lambda
- lambda 初始化捕获
- new/delete 省略
- 放宽对 constexpr 函数的限制
- 二进制字面量
- 数字分隔符
- 函数返回类型推导
- 带有默认非静态成员初始化器的聚合类。
[编辑] 新库特性
- std::make_unique
- std::shared_timed_mutex 和 std::shared_lock
- std::integer_sequence
- std::exchange
- std::quoted
- 以及对现有库设施的许多小改进,例如
- 一些算法的双范围重载
- 类型特性(type traits)的类型别名版本
- basic_string、duration 和 complex 的用户定义字面量
- 等等。
本节不完整 |
[编辑] 缺陷报告
[编辑] 编译器支持
[编辑] C++14 核心语言特性
C++14 特性 |
提案 |
GCC |
Clang |
MSVC |
Apple Clang |
EDG eccp |
Intel C++ |
Nvidia HPC C++ (前 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 | |
初始化/泛化 lambda 捕获 (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 | |
泛型 lambda 表达式 (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 (更新 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++ (前 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* |
|
---|---|---|---|---|---|---|---|---|---|
<complex> 的 constexpr | 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 (更新 2)* | 是 | 17.1.0 | 5.15 | 10.3 | |
<chrono> 的 constexpr | N3469 | 5 | 3.4 | 19.0 (2015)* | 是 | 17.1.0 | 5.15 | 10.3 | |
<array> 的 constexpr | N3470 | 5 | 3.4 | 19.0 (2015)* | 是 | 17.1.0 | 5.15 | 10.3 | |
<initializer_list>、<utility> 和 <tuple> 的 constexpr | 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 | |
修复不带 const 的 constexpr 成员函数 | 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 - “DR”后的数字 nn 表示该缺陷报告(Defect Report)所适用的 C++ 修订版本,例如 DR20 → C++20。
[编辑] 外部链接
1. | C++14 - 维基百科 |
2. | Working C++14 examples |