全书导图
本书的组织线索是生产环境中 C++ 代码在设计不够清晰时最容易付出代价的那些环节。全书从所有权、不变量、失败边界和 API 形态讲起,因为后续的架构决策能否经受评审取决于这些基础是否扎实。在此之上依次展开改变日常设计方式的库与语言工具、接口与打包、并发与性能、验证与可观测性,最终汇聚为完整的生产模式。
未定义行为是一条贯穿全书的主线,而非路线图上的独立章节。所有权部分讨论生命周期与别名风险;并发部分讨论数据竞争、关闭缺陷以及生命周期超出所有者的工作;数据与性能部分讨论失效、布局、局部性,以及薄弱测量带来的虚假信心;验证部分介绍相关的工具链与运行时信号,它们能捕获单靠代码评审发现不了的问题。
第一部分:核心心智模型
第一部分建立全书赖以展开的核心词汇:所有权、生命周期、值语义、不变量、失败边界,以及函数签名如何传达成本与持有语义。如果这些概念还不够清晰,后续章节的讨论容易沦为风格偏好之争,而非工程决策的推演。
第二部分:编写现代 C++ 代码
第二部分介绍足以改变 C++23 日常编码方式的标准库与语言工具:借用类型、结果类型与替代类型、概念(concepts)、范围(ranges)、生成器(generators),以及适度使用的编译期计算。重点不在逐一罗列语言特性,而在辨明哪些工具真正影响了契约设计、评审负担和成本模型。
第三部分:接口、库与架构
第三部分从局部代码扩展到子系统与包的边界。核心问题是一旦引入回调、类型擦除、模块、打包和 ABI 约束,接口能否继续如实兑现承诺。这也是局部设计的优雅与长期可组合性开始产生张力的地方。
第四部分:并发与异步系统
第四部分将并发视为跨越时间维度的所有权问题。共享状态、协程挂起、取消与背压,都作为生命周期与吞吐量问题来讨论,而非原语的罗列。目标是让异步工作做到有界、有主、可停止。
第五部分:数据、内存与性能
第五部分关注数据表示的决策如何转化为运行时行为。数据布局、容器选择、分配策略、局部性和测量纪律在这里整合为一条完整的成本链条,而非彼此孤立的优化技巧。
第六部分:验证与交付
第六部分介绍在设计方案确定之后如何让原生系统持续保持可信:针对边界失败的测试、sanitizer 与静态分析流水线、构建诊断,以及运行中系统的可观测性。重点在于证据的质量,不是为了打勾而打勾。
第七部分:生产模式
第七部分将前面各章的内容落实到完整的工程场景中。第 21 章展示服务边界——所有权、准入控制、优雅关闭和遥测在这里必须协调一致。第 22 章聚焦可复用库,库的契约必须经得起其他团队的检验。第 23 章以一套评审者工作流收尾,将全书内容转化为日常代码评审的实践方法。
附录
附录刻意保持精简,提供面向决策的特性索引、参考工具链与诊断基线、简版评审检查清单,以及统一全书核心术语的术语表。目的是加速实际工作,不是充当第二本教科书。