C++11 及后续版本特性对比矩阵

以下表格重新组织了C++11至C++23的主要新增(用✨表示)和修改(用🔄表示)特性。结构如下:

  • :特性(从原列表中提取独特项,分为语言和库两大组,便于阅读)。特性名称前添加序号,便于引用。
  • :特性名称、简要描述、然后各C++版本(在单元格中标✨表示新增,🔄表示主要修改/扩展,空表示无变化)。
    表格聚焦核心特性,覆盖全面但言简意赅。特性基于ISO标准,某些如constexpr在后续版本有扩展,故标🔄。用这些俏皮符号让表格更有趣:✨像新星闪耀,🔄像齿轮转动!
语言特性
序号 特性名称 简要描述 C++11 C++14 C++17 C++20 C++23
1 移动语义、右值引用、转发引用 支持高效资源转移,避免拷贝。
2 可变模板 模板参数数量可变,支持递归展开。
3 初始化列表 统一初始化语法,支持容器等。
4 静态断言 编译时检查表达式,失败报错。
5 auto 类型推导 自动推导变量类型。 🔄
6 Lambda 表达式 匿名函数,支持闭包。 🔄 🔄 🔄 🔄
7 decltype 获取表达式类型。 🔄
8 using 类型别名 简化类型定义,如typedef升级。
9 nullptr 空指针常量,避免int混淆。
10 强类型枚举 枚举有作用域和类型,避免隐式转换。 🔄
11 属性(如[[noreturn]]) 元信息标注函数/变量行为。 🔄 🔄 🔄 🔄
12 constexpr 函数 编译时求值函数。 🔄 🔄 🔄 🔄
13 委托构造函数 构造函数调用其他构造函数。
14 用户定义字面量 自定义后缀如"s" for string。 🔄
15 显式虚函数覆盖、final 指定符 确保虚函数覆盖,防止继承。
16 默认/删除函数 =default/=delete控制特殊成员。
17 范围-based for 循环 简化容器迭代。 🔄 🔄
18 非静态数据成员初始化 类中直接初始化成员。
19 尾置返回类型 函数后置返回类型,如auto f() -> int。 🔄
20 noexcept 指定符 指定函数不抛异常。
21 char16_t 和 char32_t Unicode字符类型。 🔄 🔄
22 原始字符串字面量 R"()"忽略转义。
23 内联命名空间 命名空间内联,避免前缀。 🔄
24 右角括号简化 模板中>>无需空格。
25 二进制字面量 0b前缀二进制数。
26 泛型 Lambda Lambda参数用auto。
27 Lambda 捕获初始化 捕获时初始化表达式。
28 变量模板 模板化变量。
29 泛型关联容器改进 关联容器支持异构键。
30 类模板参数推导 从构造函数推导模板参数。 🔄
31 非类型模板参数用 auto 模板参数自动类型。
32 折叠表达式 可变模板一键展开如(args + …)。
33 this 值捕获 Lambda捕获*this。
34 内联变量 头文件定义变量无ODR问题。
35 嵌套命名空间 namespace A::B { }。
36 结构化绑定 auto [x,y] = pair;。
37 初始化语句在 if/switch if (init; cond) { }。
38 constexpr if 编译时条件分支。
39 UTF-8 字符字面量 u8’c’。 🔄
40 枚举直接列表初始化 Enum e {a=1}; e = {2};。
41 __has_include 检查头文件存在。
42 协程 (co_await 等) 异步编程支持。
43 概念 (Concepts) 类型约束模板。
44 三路比较 (<=>) 单操作符比较。
45 指定初始化 Struct s{.x=1};。
46 Lambda 模板语法 Lambda用template。
47 consteval 强制编译时函数。
48 using enum 引入枚举成员。
49 Lambda 参数包捕获 捕获…args。
50 char8_t UTF-8字符类型。
51 constinit 常量初始化变量。
52 VA_OPT 宏可选参数。
53 if consteval 检查是否编译时。
54 推导 this 成员函数显式对象参数。
55 auto(x) 和 auto{x} 显式拷贝语法。
56 多维下标操作符 operator[]多参数。
57 Lambda 属性等 Lambda支持属性、static。
58 [[assume]] 属性 编译器假设优化。
59 循环初始化中 using for中使用using。
60 新预处理器 (#elifdef 等) 扩展条件宏。
61 size_t 字面后缀 1uz等无符号大小。
62 简化隐式移动规则 自动移动优化。
63 常量表达式中非字面变量 constexpr中用非字面。
库特性
序号 特性名称 简要描述 C++11 C++14 C++17 C++20 C++23
1 智能指针 (unique_ptr 等) 自动管理内存,避免泄漏。 🔄
2 多线程支持 (thread 等) 线程、锁、条件变量。
3 chrono 时间库 时间点、持续时间、时钟。 🔄
4 元组 (tuple) 多类型容器。
5 数组容器 (array) 固定大小数组。
6 无序容器 (unordered_map 等) 哈希表容器。 🔄 🔄
7 类型特性 (type_traits) 元编程检查类型。
8 move、forward、to_string 移动语义辅助、字符串转换。 🔄 🔄
9 内存模型、async、future 原子操作、异步任务。
10 make_shared、ref、cref 共享指针工厂、引用包装。
11 编译时整数序列 integer_sequence元编程。
12 make_unique unique_ptr工厂。
13 variant、optional、any 变体、可选值、任意类型。 🔄
14 string_view 非拥有字符串视图。 🔄 🔄
15 invoke、apply 调用函数、应用元组。
16 文件系统库 (filesystem) 文件操作、路径处理。
17 byte 类型 字节类型,无算术语义。
18 并行算法 STL算法并行版本。
19 sample、clamp、reduce 采样、范围限制、归约。
20 前缀求和算法、GCD/LCM 部分和、最大公约/最小公倍。
21 not_fn 否定函数对象。
22 概念库 (same_as 等) 类型约束辅助。
23 格式化库 (format 等) 字符串格式化如fmt::format。 🔄
24 osyncstream 同步输出流。
25 span 非拥有数组视图。
26 位操作 ( 等) 位操纵如popcount。 🔄
27 数学常量 () pi、e等常量。
28 is_constant_evaluated、bit_cast 检查编译时、位转换。
29 字符串 starts_with 等、容器 contains 字符串/容器便利函数。 🔄
30 bind_front、统一擦除 (erase 等) 前绑定、容器擦除。
31 Ranges 库 (views::filter 等) 范围视图和算法。 🔄
32 midpoint、to_array 中点计算、数组转换。
33 三路比较辅助 <=>支持库。
34 stacktrace 库 捕获调用栈。
35 expected 错误值处理。
36 mdspan 多维数组视图。
37 平坦容器 (flat_map 等) 平坦键值容器。
38 print、println 格式化输出。
39 generator 协程生成器。
40 move_only_function 非拷贝函数对象。
41 byteswap、to_underlying 字节序交换、枚举底层。
42 out_ptr、inout_ptr 指针输出辅助。
43 unreachable、forward_like 未达代码、转发限定。
44 allocate_at_least 分配器反馈。
45 标准库模块支持 库模块化导入。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐