BOOK / SOURCE & READING RECORD
The C++ Standard
ISO/IEC JTC 1/SC 22/WG 21
书单指定ISO/IEC 14882:2011;实际读取公开工作草案N3337(2012-01-16),不是正式ISO文本
The C++ Standard
已通读公开N3337工作草案全部30章与附录A—E的HTML正文,含全部可见代码、语法、要求表、注释与脚注。第1、15章由本代理读完,其余章节由7个分片读者逐段连续读完并保存精确台账;7幅图的SVG标签和连线关系也已读取,未声称截图核验。此full仅表示N3337公开草案完整文本,不是取得或通读付费ISO/IEC 14882:2011正式出版物,也不包括被引用的外部标准。
查看版本、实际阅读范围与原文入口 →构造失败:完整对象没析构,成员仍会清理
规范阅读的收益是把看似矛盾的口号拆成有条件的规则。对象构造失败时并非“一切都不析构”,而是未完成的完整对象与已完成的子对象不同;后者的清理正是资源句柄能够组合的基础。通过记录构造成功路径和失败路径,可以把规范中的逆序规则转成可观察的事件,而不依赖栈布局或异常实现方式。同时版本必须成为结论的一部分:公开可读的 N3337 是 C++11 之后的工作草案,包含后来被删除或改写的异常规格与生命周期措辞,不能标作 ISO 2011 正式文本,也不能据此覆盖 C++20 的全部规则。本课聚焦一项可观察的生命周期规则,不以一段程序代替整份规范;全草案阅读范围另有逐章台账。
阅读定位:N3337 §15全文,重点§15.2/1—3;§12.6.2/10;§12.4/8;§3.8全文
先区分有效程序、未指定选择与前提违规
标准不是实现教程,而是一套分层契约。核心语言先规定名字、类型、对象和表达式;库总则再规定可接受类型、调用前提、返回状态、复杂度与异常保证。“有效但值未指定”的移动后对象仍能执行满足前提的操作,不等于可任意索引;实现可以选择的顺序也不等于发生了未定义行为。库要求表检查的不只是某个表达式能否编译,还包括等价关系、排序关系和分配器互换存储等语义。读条款时,应同时记住适用条件与保证,而不是把一句结论从上下文中剪出。历史草案中的缺陷也可能被后来追溯修正,当前编译器不必复现旧文字的每一处细节。
阅读定位:N3337 §1;§3;§17.3—17.6;§20.7;§23.2
查找、候选选择和访问检查有自己的顺序
名称查找先确定含义与候选,模板推导和替换生成可参与的声明,重载规则再比较各实参转换,访问控制不能通过丢弃私有最佳匹配来帮程序选择次佳函数。多参数的“最佳”是一种逐项关系,不是把转换代价加总。继承中的名称查找还要跟踪声明集合与子对象集合:同一虚基类的共享节点,与非虚重复基类的两个对象并不等价。这样读规范,能够解释为什么看似能够调用的另一个重载没有被选中,也能避免把二阶段查找教成实例化时重新搜索整个世界。C++20约束会改变候选机制,不能把它直接塞回本草案。
阅读定位:N3337 §3.4;§10.2;§11;§13.3;§14.6—14.8;图2—6
库抽象隔离的是责任,不是所有风险
算法依赖迭代器区间而不是容器所有权,所以remove返回逻辑终点,普通输出迭代器要求目标已有元素;字符traits定义序列比较,locale facets承担文化相关规则,streambuf处理字符传输,stream保存格式与错误位。并发库又把线程句柄、锁、条件谓词与future共享状态分开。每层都有可组合的接口,也留下必须由调用者证明的边界:区间有效、借用数据仍存在、比较满足语义、同步关系真实建立。二分查找的对数比较次数不保证前向迭代器只有对数步数,regex结果也不会因为包装成对象就拥有原文。这些区别比记住类名更能指导安全代码。
阅读定位:N3337 §21—30,重点§22.4、§24.2、§25.4.3、§27.5—27.8、§28.10、§30.4—30.6
原文与实际阅读范围
- WG21公开N3337 PDF
完整公开工作草案;PDF最初提取截断,最终通过逐章HTML完成正文阅读
- N3337 HTML按条款阅读
完整30章与附录A—E逐段读取;图示通过SVG标签和边关系恢复,私有阅读台账可核对
- N3337异常处理章
第15章全文,包含现已过时的动态异常规格;本课主要规范定位
- Standard C++标准获取说明
区分付费出版物与非正式工作草案
ISO拥有正式标准及投票文本版权;公开N3337工作草案可供阅读,不因此取得本站全文再发布许可。仅外链工作草案,原创解释不冒充ISO正式规范。
能下载不等于已经读完;试读章节不等于全书。这里的原创笔记不是原书全文、译本或逐章替代品。
相关基础知识
相关主题链接用于补充背景,不表示这些既有文章已经按整本书核查。