C++ 各标准版本核心特性差异对比
概述
C++ 自 1998 年首次标准化以来,经历了多次重大更新。每个新标准都引入了语言特性和标准库的增强,显著提升了开发效率、性能和安全性。
核心特性对比
以下是 C++ 各主要版本(C++98/03 → C++23)的核心特性对比,按版本清晰梳理:
| 版本 | 发布年份 | 关键语言特性 | 标准库新增/增强 |
|---|---|---|---|
| C++98 / C++03 | 1998 / 2003 | - 命名空间 (namespace) |
- 异常处理 (try/catch)
- 模板 (Templates)
- bool 类型
- RTTI (dynamic_cast, typeid) | - STL(vector, map, algorithm 等)
- I/O 流 (iostream) | | C++11(现代 C++ 起点) | 2011 | - auto / decltype
- Lambda 表达式 {}
- 右值引用 & 移动语义 (&&, std::move)
- nullptr
- 范围 for 循环 for (auto x : v)
- constexpr(编译期常量)
- 可变参数模板
- 统一初始化 {}
- static_assert | - 智能指针:unique_ptr, shared_ptr
- 线程支持:thread, mutex
- unordered_map/set
- chrono 时间库
- array, tuple | | C++14(C++11 的完善) | 2014 | - 泛型 Lambda([](auto x){})
- 函数返回类型自动推导(auto f() { return 42; })
- decltype(auto)
- 二进制字面量 0b1010
- 数字分隔符 1'000'000
- 放宽 constexpr(允许循环、分支) | - make_unique
- 更灵活的 integral_constant | | C++17(实用主义飞跃) | 2017 | - 结构化绑定 auto [x, y] = pair;
- if/switch 初始化语句
- if constexpr(编译期条件)
- 折叠表达式 (args + ...)
- 内联变量 inline constexpr int x = 5;
- [[nodiscard]], [[maybe_unused]] 属性 | - optional, variant, any
- string_view(非拥有字符串视图)
- filesystem(文件操作)
- 并行算法(execution::par) | | C++20(现代化大升级) | 2020 | - Concepts(模板约束)
- Modules(替代头文件)
- 协程(co_await, co_yield)
- 三向比较 <=>('太空船运算符')
- 范围 for 支持初始化
- Lambda 模板参数 [](T x){}
- constexpr 几乎支持全部语法 | - Ranges 库(views::filter, views::transform)
- span(连续内存视图)
- 日历与时区(扩展)
- 同步原语:latch, barrier, semaphore
- format(类似 Python f-string,但正式加入在 C++20 提案,C++23 定稿) | | C++23(最新标准) | 2024 | - if consteval(检测是否在常量求值上下文)
- 多维下标 obj[i, j]
- Lambda 改进(捕获参数包、推导 this)
- 扩展 constexpr(更多 STL 算法支持) | - std::print / std::println(直接输出,无需 iostream)
- std::expected |

