C++14
From cppreference.net
<
cpp
C++14 是在主要版本 C++11 之后的一个次要版本,主要包含小幅改进和缺陷修复。其批准公告于 2014 年 8 月 18 日发布,并于 2014 年 12 月 15 日正式发行。
在获得批准之前,C++1y有时被用来表示其在2010年代发布的版本。
| 本节内容尚不完整 |
目录 |
新语言特性
- 变量模板
- 泛型lambda表达式
- lambda初始化捕获
- 新建/删除省略
- constexpr函数限制放宽
- 二进制字面量
- 数字分隔符
- 函数返回类型推导
- 聚合类 带有默认非静态成员初始化器。
新库特性
- std::make_unique
- std::shared_timed_mutex 和 std::shared_lock
- std::integer_sequence
- std::exchange
- std::quoted
-
以及对现有库功能的诸多细节改进,例如:
- 部分算法的双范围重载版本
- 类型特征的别名版本
- 为 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) ,普通函数的返回类型推导 ( 功能测试宏 ) * ( 功能测试宏 ) * | 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 | |
| 变量模板 ( 功能测试宏 ) * | 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 | |
| 带有 默认成员初始化器 的聚合体 ( 功能测试宏 ) * | 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 | N/A | 3.4 | N/A | 是 | N/A | N/A | 17.4 | N/A | 8.6 | 10.3 | 17.1.0 | 1.1.0 | N/A | N/A | |
[[
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 | |
| 带大小释放 ( 功能测试宏 ) * | 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*
|
|
|---|---|---|---|---|---|---|---|---|---|
| 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 ( 功能测试宏 ) * | 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 ( 功能测试宏 ) * | 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 | |
| 异构关联查找 ( FTM ) * | 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 | |
| 修复不带 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 | |
| 用于 转换特征 的别名模板 ( 功能测试宏 ) * | N3655 | 4.9 | 3.4 | 18.0* | 是 | ||||
std::complex
的用户定义字面量
(
功能测试宏
)
*
|
N3779 | 4.9 | 3.4 | 19.0 (2015)* | 是 | ||||
| DR11: std::is_null_pointer ( 功能测试宏 ) * | LWG2247 | 4.9 | 3.4 | 19.0 (2015)* | |||||
| std::is_final ( 特性测试宏 ) * | LWG2112 | 5 | 3.4 | 19.0 (2015)* | |||||
| std::make_reverse_iterator ( 功能测试宏 ) * | LWG2285 | 5 | 3.4 | 19.0 (2015)* | |||||
| std::shared_timed_mutex ( 功能测试宏 ) * | N3891 | 4.9 | 3.5 | 19.0 (2015)* | 是 | ||||
| std::tuple_element_t ( 功能测试宏 ) * | 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*
|
*
- 将鼠标悬停在标有星号
*
的单元格上可查看附加弹出说明。
DR
nn
- "DR"后的数字
nn
表示缺陷报告所适用的目标C++修订版本,例如:DR20 → C++20。
外部链接
| 1. | C++14 - 维基百科 |
| 2. | 可运行的C++14示例 |