现代 C++ 实践导读

现代 C++ 实践导读

时间:2026/05/08

这组笔记按“对象语义 -> 内存与所有权 -> 并发 -> 设计模式 -> 网络与协程 -> 常用工具 -> 泛型与编译期 -> 工程实践”的顺序整理。
不建议按最早写作顺序读,建议优先按下面的编号顺序走。


1. 推荐阅读顺序

  1. 对象生命周期、特殊成员函数与移动语义
  2. 智能指针与所有权
  3. allocator、自定义内存分配与 pmr
  4. 生产者-消费者模式与阻塞队列
  5. 线程同步消息队列与线程池
  6. 工厂模式、多态与接口设计
  7. 游戏常见设计模式
  8. 对象布局、栈堆与未定义行为
  9. 网络服务基础:TCP 粘包、线程模型与 HTTP(S)
  10. C++20 协程入门与实践
  11. 现代 C++ 常用工具类型
  12. ranges 与 views
  13. 错误处理与 expected、异常设计
  14. 内存泄漏检测与管理
  15. STL 容器、迭代器与算法实践
  16. 编译模型、链接与 CMake 入门
  17. 测试、调试与 Sanitizer 工具链
  18. const 正确性、API 设计与现代属性
  19. constexprconsteval 与编译期计算实践
  20. C++20 concepts 与泛型接口约束
  21. 常用标准库组件:formatchronofilesystemsource_location
  22. 依赖管理与包管理:FetchContent、vcpkg、Conan

2. 这次整理做了什么

这套笔记经历了两轮整理:

  1. 把错名、重复和草稿笔记重构成清晰主题
  2. 把空白或过短内容补成可复习版本
  3. 新增一篇缺失但非常常用的工具类型笔记
  4. 补上了 ranges/views、错误处理设计,以及内存泄漏检测与管理这三块现代 C++ 高频主题
  5. 补上了 STL 容器算法、编译链接/CMake、测试调试/Sanitizer 这三块工程实践基础
  6. 补齐 API 设计、编译期计算、concepts、常用标准库组件、依赖管理这五块后续缺口,并尽量配了可直接复习的代码示例

3. 如果时间有限

优先看这 10 篇:

  1. 生命周期、特殊成员函数与移动语义
  2. 智能指针与所有权
  3. STL 容器、迭代器与算法实践
  4. 现代 C++ 常用工具类型
  5. 错误处理与 expected、异常设计
  6. const 正确性、API 设计与现代属性
  7. constexprconsteval 与编译期计算实践
  8. C++20 concepts 与泛型接口约束
  9. 编译模型、链接与 CMake 入门
  10. 测试、调试与 Sanitizer 工具链

这几篇最直接影响现代 C++ 的工程写法。之后再看线程池、协程、ranges、网络和包管理。


4. 后续还可以补的主题

这次已经补齐了 API 设计、编译期计算、concepts、常用标准库组件和依赖管理。
如果继续扩展,比较值得补的是:

  1. 模块化与 C++20 modules 实践
  2. 完美转发、引用折叠与泛型工厂
  3. 类型擦除:std::function、自定义 type erasure 与多态替代
  4. ABI 稳定性、PImpl 与动态库接口设计
  5. 性能基准测试:Google Benchmark、profiling 与性能回归
  6. 日志、配置、序列化等常见工程基础设施设计

5. 按实例复习的路线

如果想边看边练,可以优先按这些例子复习:

  1. 生命周期实例:手写资源类、Rule of Five、返回值优化
  2. 所有权实例:unique_ptr/shared_ptr/weak_ptr、自定义 deleter
  3. 并发实例:阻塞队列、线程池、停止协议、任务返回值
  4. 设计模式实例:注册表工厂、对象池、状态模式、命令模式
  5. 网络实例:长度前缀拆包器、I/O 线程 + 业务线程池分层
  6. 协程实例:最小 generator,理解 co_yield 和协程帧生命周期
  7. 泛型实例:concepts 约束 range、策略对象接口、静态多态
  8. 工程实例:CMake target、Sanitizer、FetchContent/vcpkg/Conan 依赖接入