C++ / a working model

BOOK / SOURCE & READING RECORD

C++ Templates: The Complete Guide

David Vandevoorde; Nicolai M. Josuttis; Douglas Gregor

2nd edition, 2017

READING EVIDENCE / 已读部分正文

C++ Templates: The Complete Guide

已顺序读完第二版第 1–28 章及附录 A–E 的可读正文和文本代码,另交叉阅读官方第 4、23 章。已检查全部 13 幅实质插图对应的 12 个 PDF 页:图 18.1–18.5、D.1 可见且已读;图 13.1、21.1–21.4、27.1、B.1 在取得的 PDF 中仅剩标题或链接、图形缺失(共 7 幅),因此仍列部分覆盖,不把标题当作图像阅读。图 18.4 的图形位于标题前一页,已核对。实际版本为 2017 年出版、版权 2018 的第二版,不冒充第一版阅读。目录、书目、索引不计正文。书中 Concepts 是 C++20 定稿前设计;旧式 -> bool 语法不能当作最终 C++20。

查看版本、实际阅读范围与原文入口 →

阅读原创实践:折叠表达式:空输入、短路与求值顺序 →

参数包先有代数,再有语法

参数包把一族接口变成一个模板,并不自动定义空输入、求值顺序与失败语义。折叠表达式首先是括号结构:左折叠与右折叠对于减法就不同。若用逻辑与组成检查器,空集合的结果应是“没有约束被违反”,而运行时失败后不继续检查可以避免无效工作;但这一短路不能替代编译期的表达式有效性检查。第 23 章又提示,编译期也是需要预算的计算过程,递归类型构造会增加实例化与诊断负担。现代值计算优先考虑 constexpr,类型变换才保留必要的模板机制,不能把复杂模板语法本身当成性能收益。

阅读定位:第 4 章 4.2 Fold Expressions、4.3 Variadic Template Applications;第 23 章 23.1、23.3、23.5。

可实例化不是语义正确,零开销也不是零成本

第 19–20 章把类型事实、可替换策略与重载参与条件拆开:检测一个表达式有效,不代表它满足算法需要的顺序关系或单位语义。第 21–26 章则展示布局、构造顺序、转发、类型擦除与 variant 活跃成员状态相互牵制;接口泛化不能忽略对象生存期。第 27 章的表达式模板可合并循环,但 x=A*x 的跨元素别名依赖仍可能要求临时量。第 28 章的最小能力 archetype 用来揭露算法偷偷依赖额外运算,tracer 只能证明所测输入的操作轨迹,不能替代正确性论证。C++20 中优先复用标准 traits、tuple、variant 和具备明确语义的 concepts;需要定制时也分别衡量编译成本、运行成本与维护成本。

阅读定位:19.2、19.4.4、19.7.1;20.3.3、20.5;21.1;22.4–22.6;25.3.4–25.5;26.4.3;27.3;28.3–28.5;附录 E.4。

原文与实际阅读范围

Pearson 版权所有,第三方完整 PDF 仅保存于私有研究目录;公开可访问不是再分发许可。不托管或链接第三方下载,只发布出版社外链与原创课程。

能下载不等于已经读完;试读章节不等于全书。这里的原创笔记不是原书全文、译本或逐章替代品。

相关基础知识

相关主题链接用于补充背景,不表示这些既有文章已经按整本书核查。

← 返回全部书籍