C++ 现代特性:从 C++11 到 C++23
更新时间:2026-08-25。本文是
languages/域落地主题 C++ 现代特性 的总纲。C++ 曾以"复杂"著称,但 C++11 之后的现代 C++ 有了清晰的工程哲学——用 RAII 管资源、用值语义表达所有权、用零成本抽象组织代码。
为什么本站要讲现代 C++
本站的主线是 Linux CPU 性能剖析与低延时编程,而 C++ 是现代性能敏感软件的默认语言:数据库、浏览器引擎、游戏引擎、量化交易系统、以及本站的 demos/cpu-demo 都是 C++。学会现代 C++,你才能:
- 写出既快又安全的底层代码(对比 C 的手动管理)。
- 读懂本站 demos/ 中大量 C++ 实验代码。
- 用 RAII/移动语义写出异常安全 + 高性能的工程代码。
| C++ 现代特性 | 解决 C 的什么问题 | 对应本站主线 |
|---|---|---|
| RAII + 智能指针 | 手动 malloc/free 易泄漏/悬垂 | crash 内存泄漏 |
| 移动语义 | 拷贝大对象浪费内存带宽 | L3 内存子系统 |
auto/范围 for | 类型冗长、迭代器啰嗦 | — |
| lambda | 回调/排序/线程代码内聚 | L2 线程与调度 |
| 模板 + constexpr | 编译期计算、零成本抽象 | L4 编译器优化 |
| 并发原语 | 线程/原子/条件变量 | L4 内存序与原子操作 |
一句话定位:languages/cpp/ 把"性能剖析的底层功力"翻译成"现代 C++ 工程怎么写"——用 C++ 的方式把资源、所有权、性能都管理明白。
学习路径:入门 → 高手 → 专家(三层递进)
C++ 主题按「入门 / 高手 / 专家」三层组织,层层递进、覆盖现代 C++ 的大部分知识点:

| 层 | 目录 | 文档 | 产出 |
|---|---|---|---|
| 入门 | beginner/ | 类与对象、STL 容器与迭代器 | 会用类与 STL 写程序 |
| 高手 | intermediate/ | RAII 与智能指针、移动语义与右值引用、模板与泛型编程、异常安全与错误处理、并发与线程安全 | 写出异常安全、高性能的工程 |
| 专家 | expert/ | 虚函数、虚表与多态机制、对象内存布局与编译期优化 | 理解多态与对象的底层机制 |
一、C++11~23 关键特性地图
| 版本 | 关键特性 | 工程意义 |
|---|---|---|
| C++11 | auto、范围 for、lambda、右值引用/移动语义、nullptr、std::unique_ptr/shared_ptr、constexpr、std::thread | 现代 C++ 的起点,一次大重构 |
| C++14 | 泛型 lambda、constexpr 放宽、std::make_unique | 打磨 |
| C++17 | 结构化绑定、std::optional/variant/string_view、if constexpr、文件系统 | 更少的样板代码 |
| C++20 | concepts(概念)、范围库 ranges、协程 coroutine、std::span、三路比较 <=> | 表达力再次跃升 |
| C++23 | std::expected、std::mdspan、模块化完善、deducing this | 工程化收尾 |
现代 C++ 的标准演进(11→14→17→20→23)本质是:持续降低写安全、高性能代码的门槛。写新代码建议至少按 C++17,逐步用 C++20。
二、现代 C++ 的核心理念
| 理念 | 内容 | C 语言对照 |
|---|---|---|
| RAII | 资源(内存/锁/文件)在构造函数获得、析构函数释放 | 手动 malloc/free、lock/unlock |
| 值语义 | 对象按值传递,拷贝/移动有明确定义 | 指针到处传,所有权模糊 |
| 零成本抽象 | 抽象不引入运行时开销(模板/内联) | 宏 + 函数指针 |
| 异常安全 | 抛出异常时资源不泄漏(RAII 保证) | 出错全靠返回码 |
| const 正确性 | 编译期标注不变性 | 全靠自觉 |
2.1 最小的现代 C++ 程序
cpp
#include <iostream>
#include <memory>
#include <vector>
int main() {
auto nums = std::make_unique<std::vector<int>>(3, 42); // RAII + auto
for (const auto &n : *nums) { // 范围 for
std::cout << n << " ";
}
std::cout << std::endl;
return 0; // unique_ptr 析构自动释放,无泄漏
}编译:g++ -std=c++17 -O2 -g -o demo demo.cpp——本站 demos 的 C++ 实验均采用类似约定。
三、C++ vs C vs Rust
| 对比项 | C | 现代 C++ | Rust |
|---|---|---|---|
| 内存安全 | 手动 | RAII(运行期析构) | 所有权(编译期检查) |
| 抽象成本 | 低 | 零成本 | 零成本 |
| 学习曲线 | 平缓 | 陡峭(特性多) | 陡峭(借用检查) |
| 生态成熟度 | 极高 | 极高 | 成长中 |
| 性能 | 极高 | 极高 | 极高 |
| 本站定位 | 性能剖析母语 | 底层实验/工程主力 | 可与 C 类比内存模型 |
本站建议:性能剖析主线 C 打底、C++ 做底层实验(RAII 更省心);追求编译期内存安全可选 Rust。
四、与本站性能剖析主线衔接
- 编译器优化:
-O2下模板/内联展开的汇编,见 L4 编译器选项。 - 内存与缓存:移动语义减少拷贝、对象布局影响缓存命中,见 L3 内存子系统。
- 并发:
std::atomic/std::mutex与内存序,见 L4 内存序与原子操作。 - 剖析:C++ 程序同样用 perf 定位热点;崩溃用 crash 排查线。
一句话总结
C++ 现代特性 = 以 RAII 管资源、以移动语义省拷贝、以模板做零成本抽象;从 C++11 起它从"带类的 C"进化为"工程化系统语言",是本站性能剖析主线的主战场语言。
深入:入门从 类与对象 开始 → 高手读 RAII 与智能指针 → 专家读 虚函数、虚表与多态机制。相邻主题:C 语言。