概述

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

重点说明

  • C++11 是分水岭:引入了现代 C++ 编程范式(自动类型、Lambda、移动语义、智能指针等),后续版本基本是其演进。
  • C++14 较小:主要是对 C++11 的“甜味剂”(syntactic sugar)和小幅增强。
  • C++17 更注重实用性:如 optional 避免空指针、filesystem 解决跨平台文件操作痛点。
  • C++20 是革命性版本:Concepts 让模板更安全,Ranges 简化算法组合,Modules 提升编译速度。
  • C++23 聚焦易用性与工程化:std::print 简化输出,expected 提供无异常错误处理方案。

查看当前编译器支持标准

如何查看当前编译器支持的 C++ 标准?

#include <iostream>
int main() {
    std::cout << "__cplusplus = " << __cplusplus << std::endl;
    return 0;
}

对应关系:

  • 199711L → C++98
  • 201103L → C++11
  • 201402L → C++14
  • 201703L → C++17
  • 202002L → C++20
  • 202302L → C++23
Logo

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

更多推荐