C++11 及后续版本特性对比矩阵
·
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 | 标准库模块支持 | 库模块化导入。 | ✨ |
更多推荐
所有评论(0)