C++98 → C++23 各版本特性对比

233 阅读3分钟

C++ 各主要版本的核心特性列表(只列标准里最关键的变化,方便快速查阅):

1.png

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::any
  • std::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::println
  • multidimensional 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