C++11
From cppreference.net
<
cpp
C++11 是 C++ 的第二个主要版本,也是自 C++98 以来最重要的更新。本次更新引入了大量变更,旨在标准化现有实践并提升 C++ 程序员可用的抽象能力。
在2011年8月12日被ISO最终批准前,该标准一直使用'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 风格 Unicode 转换函数
目录 |
核心语言特性
- auto 和 decltype
- 默认函数 和 删除函数
- final 和 override
- 后置返回类型
- 右值引用
- 移动构造函数 和 移动赋值运算符
- 有作用域枚举
- constexpr 和 字面量类型
- 列表初始化
- 委托构造函数 和 继承构造函数
- 花括号或等号 初始化器
- nullptr
- long long
- char16_t 和 char32_t
- 类型别名
- 可变参数模板
- 广义(非平凡)联合体
- 广义POD ( 平凡类型 和 标准布局类型 )
- Unicode字符串字面量
- 用户定义字面量
- 属性
- Lambda表达式
- noexcept 说明符和 noexcept 运算符
- alignof 和 alignas
- 多线程 内存模型
- 线程局部存储
- 垃圾回收接口 (在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()及右值引用在现有库各部分的广泛应用 - std::unique_ptr
- std::move_iterator
- std::initializer_list
- 有状态 与 作用域 分配器
- std::forward_list
- chrono 时间库
- ratio 比例库
- 新增 算法 :
-
- 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
| 本节内容尚不完整 |
缺陷报告
编译器支持
C++11 核心语言特性
|
C++11 feature
|
Paper(s)
|
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++
|
HP aCC
|
Digital Mars C++
|
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| C99 preprocessor | N1653 | 4.3 | Yes |
19.0 (2015)*
(partial)*
19.26* |
Yes | 4.1 | 11.1 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 10.1 | 5.9 | A.06.25 | Yes | |
| static_assert ( FTM ) * | N1720 | 4.3 | 2.9 | 16.0* | Yes | 4.1 | 11.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | 8.52 | |
| Right angle brackets | N1757 | 4.3 | Yes | 14.0* | Yes | 4.1 | 11.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 12.1 | 5.13 | |||
| Extended friend declarations | N1791 | 4.7 | 2.9 | 16.0* | Yes | 4.1 |
11.1 (partial)
12.0 |
2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
long long
|
N1811 | Yes | Yes | 14.0* | Yes | Yes | Yes | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | Yes | Yes | Yes | Yes | |
| auto | N1984 | 4.4 | Yes | 16.0* | Yes | 3.9 |
11.0
(partial)*
12.0 |
2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
| Delegating constructors ( FTM ) * | N1986 | 4.7 | 3.0 | 18.0* | Yes | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.28 | ||
| extern template | N1987 | 3.3 | Yes | 12.0* | Yes | 3.9 | 9.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.25 | ||
| constexpr ( FTM ) * | N2235 | 4.6 | 3.1 | 19.0 (2015)* | Yes | 4.6 |
13.0 (partial)
14.0 |
2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 |
12.1 (partial)
13.1 |
5.13 | A.06.28 | ||
char16_t
and
char32_t
(
FTM
)
*
|
N2249 | 4.4 | 2.9 | 19.0 (2015)* | Yes | 4.4 |
12.1 (partial)*
14.0 |
2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | 8.52 | |
| Compiler support for type traits . N2255* |
N2255
N2984 N3142 |
4.3 (partial)*
4.8 (partial)* 5 |
3.0 |
14.0*
(partial)* 19.0 (2015)* |
Yes | 4.0 | 10.0 | 2015 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.3 | 5.13 | 6.16 | |||
| Template aliases ( FTM ) * | N2258 | 4.7 | 3.0 | 18.0* | Yes | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | ||
| alignas | N2341 | 4.8 | 3.0 | 19.0 (2015)* | Yes | 4.8 | 15.0 | 2015 | 7.0 | 8.6 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | |||
| alignof | N2341 | 4.5 | 2.9 | 19.0 (2015)* | Yes | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | |||
| Defaulted and deleted functions | N2346 | 4.4 | 3.0 | 18.0* | Yes | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1 | 5.13 | A.06.25 | ||
Strongly-typed
enum
|
N2347 | 4.4 | 2.9 |
16.0*
(partial)
17.0* |
Yes | 4.0 | 13.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.25 | ||
| Atomic operations | N2427 | 4.4 | 3.1 | 17.0* | Yes | Yes | 13.0 | 2015 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | ||||
| nullptr | N2431 | 4.6 | 2.9 | 16.0* | Yes | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1 | 5.13 | A.06.27 | 8.52 | |
| Explicit conversion operators | N2437 | 4.5 | 3.0 | 18.0* | Yes | 4.4 | 13.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.27 | ||
| ref-qualifiers ( FTM ) * | N2439 | 4.8.1 | 2.9 | 19.0 (2015)* | Yes | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| Unicode string literals ( FTM ) * | N2442 | 4.4 | 3.0 | 19.0 (2015)* | Yes | 4.7 | 11.0* | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 |
10.1*
13.1.1* |
5.7 | A.06.28 | 8.52 | |
| Raw string literals ( FTM ) * | N2442 | 4.5 | Yes | 18.0* | Yes | 4.7 | 14.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.1, except AIX xlC 13.1.3* | 5.13 | A.06.28 | 8.52 | |
| Inline namespaces | N2535 | 4.4 | 2.9 | 19.0 (2015)* | Yes | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 11.1 | 5.13 | A.06.28 | ||
| Inheriting constructors ( FTM ) * | N2540 | 4.8 | 3.3 | 19.0 (2015)* | Yes | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | |||
| Trailing function return types | N2541 | 4.4 | 2.9 | 16.0* | Yes | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.27 | ||
| Unrestricted union s | N2544 | 4.6 | 3.0 | 19.0 (2015)* | Yes | 4.6 | 14.0* | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| Variadic templates ( FTM ) * |
N2242
N2555 |
4.3
(partial)*
4.4 |
2.9 | 18.0* | Yes |
4.3
(partial)*
4.3 |
12.1 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 11.1 (partial)* | 5.13 | A.06.27 | ||
| Expression SFINAE | N2634 | 4.4 | 2.9 | 19.14* | Yes | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | |||||
| Local and unnamed types as template parameters | N2657 | 4.5 | 2.9 | 16.0* | Yes | 4.2 | 12.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.27 | ||
| Thread-local storage | N2659 |
4.4 (partial)
4.8 |
3.3* |
16.0*
(partial)
19.0 (2015)* |
Yes | 4.8 |
11.1 (partial)
15.0* |
2015 | 8.4 | Yes | 17.1.0 | 1.1.0 |
10.1 (partial)*
13.1.2 (partial)* |
5.9 (partial) | 8.52 (partial) | |||
| Dynamic initialization and destruction with concurrency ( magic statics ) ( FTM ) * | N2660 | 4.3 | 2.9 | 19.0 (2015)* | Yes | Yes | 11.1* | 2015 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.25 | |||
| Garbage Collection and Reachability-Based Leak Detection | N2670 | |||||||||||||||||
| Initializer lists ( FTM ) * | N2672 | 4.4 | 3.1 | 18.0* | Yes | 4.5 |
13.0 (partial)
14.0 |
2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| Non-static data member initializers ( FTM ) * | N2756 | 4.7 | 3.0 | 18.0* | Yes | 4.6 | 14.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
Attributes
,
[[
noreturn
]]
(
FTM
)
*
|
N2761 | 4.8 | 3.3 | 19.0 (2015)* | Yes | 4.2 | 12.1 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.27 | ||
[[
carries_dependency
]]
|
N2556
N2643 |
3.3* | 17.1.0* | |||||||||||||||
Forward (opaque)
enum
declarations
|
N2764 | 4.6 | 3.1 | 17.0* | Yes | 4.5 |
11.1 (partial)
14.0 |
2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 12.1 | 5.13 | |||
| User-defined literals ( FTM ) * | N2765 | 4.7 | 3.1 | 19.0 (2015)* | Yes | 4.8 | 15.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.14 | |||
| Rvalue references ( FTM ) * |
N2118
N2844 CWG1138 |
4.3
(partial)*
4.5 |
2.9 |
16.0*
(partial)*
17.0* |
Yes | 4.5 |
11.1
(partial)*
12.0 (partial)* 14.0 |
2015 | 7.0* | 8.4 | Yes | 17.1.0 | 1.1.0 | 12.1 | 5.13 | A.06.25 | ||
| Lambda expressions ( FTM ) * |
N2550
N2658 N2927 |
4.5 | 3.1 |
16.0*
(partial)*
17.0* |
Yes | 4.1 | 12.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.25 | ||
| Range-for loop ( FTM ) * |
N2930
N3271 |
4.6 | 3.0 | 17.0* | Yes | 4.5 | 13.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.2* | 5.13 | A.06.28 | ||
| noexcept | N3050 | 4.6 | 3.0 | 19.0 (2015)* | Yes | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | A.06.28 | ||
| Defaulted move special member functions | N3053 | 4.6 | 3.0 | 19.0 (2015)* | Yes | 4.5 | 14.0 | 2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 5.13 | A.06.25 | |||
| override and final |
N2928
N3206 N3272 |
4.7 | 2.9 |
14.0*
(partial)
17.0* |
Yes | 4.8 |
12.0
(partial)*
14.0 |
2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 13.1.1* | 5.13 | |||
| decltype ( FTM ) * |
N2343
N3276 |
4.3
(partial)*
4.8.1 |
2.9 |
16.0*
(partial)*
17.0* |
Yes |
4.2
(partial)*
4.8 |
11.0
(partial)*
12.0 |
2015 | 7.0 | 8.4 | Yes | 17.1.0 | 1.1.0 | 11.1 (partial)* | 5.13 | A.06.25 | 8.52 (partial)* | |
|
C++11 feature |
Paper(s) |
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++
|
HP aCC
|
Digital Mars C++
|
C++11 标准库特性
|
C++11 特性
|
提案文档
|
GCC libstdc++
|
Clang libc++
|
MSVC STL
|
Apple Clang*
|
IBM Open XL C/C++ for AIX*
|
Sun/Oracle C++*
|
Embarcadero C++ Builder*
|
|
|---|---|---|---|---|---|---|---|---|---|
| 正则表达式库 | N1429 | 4.9 | 2.8 | 是 | 是 | 17.1.0 | |||
| 类型特性 . N1836* |
N1836
N2240 N2244 N2255 N2342 N2984 N3142 |
4.3 (部分)*
4.8 (部分)* 5 |
3.0 |
14.0*
(部分)* 19.0 (2015)* |
是 | 17.1.0 | 5.13 | 是 | |
容器的成员函数
cbegin
,
cend
,
crbegin
, 和
crend
|
N1913
LWG1192 |
4.3
(部分)*
4.5 |
是* | 16.0* | 是* | 17.1.0 | |||
| 垃圾回收 与基于可达性的泄漏检测 ( 库支持 ) | N2670 |
6
(无操作)* |
3.4
(无操作)* |
19.0 (2015)*
(无操作)* |
是
(无操作)* |
17.1.0 | |||
| 货币、时间和十六进制浮点数I/O操纵器 |
N2071
N2072 |
5 | 3.8 | 19.0 (2015)* | 是 | 17.1.0 | 5.15 | ||
| 禁止 COW (写时复制) std::basic_string | N2668 | 5 | 是 | 是 | 是 | 17.1.0 | 是 | ||
|
C++11 特性 |
提案文档 |
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++11 - 维基百科 |
| 2. | 可运行的C++11示例 |