C++ 各主要版本的核心特性列表(只列标准里最关键的变化,方便快速查阅):
C++98 / C++03
(C++98 是第一个 ISO 标准,C++03 是技术修订版,基本相同)
- 标准模板库(STL):vector、list、map、algorithm 等
- 异常处理
try / catch - 命名空间
namespace - RTTI(运行时类型识别):
dynamic_cast/typeid - 模板(Template)
bool类型引入
C++11(C++ 的“大跃进”版本)
auto类型推导decltype获取类型nullptr替代NULL- 匿名函数:Lambda 表达式
range-based for循环static_assert编译期断言- 智能指针:
std::unique_ptr,std::shared_ptr - 右值引用
&&和移动语义 - 可变参数模板(variadic templates)
- 初始化列表
int arr[]{1,2,3}; constexpr常量表达式
C++14(小幅增强)
- 泛型 Lambda(参数可用
auto) - 返回类型推导(函数
auto f(){ return 1; }) - 二进制字面量
0b1010 - 数字分隔符
1'000'000 std::make_unique- Relaxed
constexpr(constexpr 函数里可以有分支和循环)
C++17
if constexpr编译期条件- 结构化绑定
auto [a,b] = pair; - 内联变量
inline constexpr int x = 5; std::optional/std::variant/std::anystd::string_view- 折叠表达式(fold expression)
filesystem标准库[[nodiscard]]等新属性- 更强的模板推导规则
C++20
- Concepts 概念(更强的模板约束)
- Ranges 库(
std::ranges) - 模块(Modules)
- 协程(Coroutines:
co_await,co_yield,co_return) - 三向比较
<=>(宇宙飞船运算符) constexpr更强大(几乎可在编译期执行所有逻辑)- 日历和时区库
<chrono>扩展 std::span(轻量视图)- 新属性:
[[likely]]/[[unlikely]]
C++23(最新已发布)
if consteval(检测是否在常量上下文中执行)- 扩展
constexpr(支持更多 STL 算法) std::expected(错误处理代替异常的新类型)- Ranges 扩展(
views::join_with等) std::print/std::printlnmultidimensional subscript operator多维下标obj[i,j]- 扩展 Lambda:推导 this 类型、捕获参数包等
std::mdspan(多维数组视图)
👉 这样就能看到 C++11 是大飞跃,后续每个版本都是在它的基础上迭代。
👌 收到,你说得对,上面表格确实有点“挤”在一起,看起来不够清晰,像是把段落堆进了表格格子里。 我帮你重新排版成 真正的一览对比表 —— 每个标准只放关键特性,结构简洁。
✅ C++ 标准主要特性对比表(简洁清晰版)
| 标准版本 | 关键语言特性 | 标准库特性 |
|---|---|---|
| C++98 / 03 | - 命名空间 namespace - 异常处理 try/catch - RTTI dynamic_cast, typeid - 模板 (Templates) - bool 类型 | - STL(容器、算法、迭代器) |
| C++11 | - auto, decltype - Lambda 表达式 - nullptr - 右值引用 & 移动语义 - 可变参数模板 - constexpr - range-based for - static_assert | - 智能指针 unique_ptr, shared_ptr - 初始化列表 {} |
| C++14 | - 泛型 Lambda (auto 参数) - 返回类型推导 auto f(){} - Relaxed constexpr (循环、分支可用) | - std::make_unique - 二进制字面量 0b1010 - 数字分隔符 1'000'000 |
| C++17 | - if constexpr - 结构化绑定 auto [a,b] - 折叠表达式 | - std::optional, std::variant, std::any - std::string_view - std::filesystem - 内联变量 inline - [[nodiscard]] 属性 |
| C++20 | - Concepts(约束模板) - Modules(模块) - Coroutines(协程) - 三向比较 <=> | - Ranges 库 std::ranges - 更强的 constexpr - std::span - 日历/时区扩展 <chrono> - [[likely]], [[unlikely]] 属性 |
| C++23 | - if consteval - Lambda 扩展(捕获参数包、推导 this 类型) - 多维下标 obj[i,j] | - std::expected - Ranges 扩展( join_with 等) - std::print / std::println - std::mdspan - 更多 STL 算法支持 constexpr |