Exceptional C++(侯捷译完整版)

基本信息

  • 标题: Exceptional C++:C++程序设计问题的剖析与解决方案(侯捷译)
  • 作者: Herb Sutter(赫伯·萨特)
  • 译者: 侯捷
  • 页数: 约100页(分散在多个PDF文件中)
  • 大小: 1.3MB(压缩包)
  • 来源: /books/c++/Exceptional C++.7z → exceptional_houjie/Exceptional C++(侯捷版)/
  • 处理日期: 2026-09-03
  • 方法: pdftotext提取 + pdf-inspector分类检测
  • 状态: done

文件组成

原压缩包包含以下PDF文件:

  1. exceptional-cpp-content.pdf - 目录页(5页,加密)
  2. exceptional-cpp-item1.pdf - 条款1:Iterators(4页)
  3. exceptional-cpp-preface.pdf - 前言(4页)
  4. exceptional-cpp-prolog.pdf - 译序(2页)
  5. exceptional-cpp-foreword.pdf - 序言(2页)
  6. exceptional-cpp-item20-25.pdf - 条款20-25(36页)
  7. exceptional-cpp-bibliography.pdf - 参考书目(2页)

内容概要

Herb Sutter的经典C++编程著作,以”问题/解答”格式深入探讨C++编程中的实际问题。本书是《Effective C++》作者Scott Meyers极力推荐的进阶读物。

结构组织

第一部分:泛型程序设计

  • 条款1:Iterators(迭代器)
  • 条款2:无分大小写的字符串之一
  • 条款3:无分大小写的字符串之二
  • 条款4:将泛型容器的重用性扩张至最大之一
  • 条款5:将泛型容器的重用性扩张至最大之二
  • 条款6:暂时物件
  • 条款7:使用标准程式库

第二部分:Exception-Safety(异常安全性)

  • 条款8-17:撰写Exception-Safe程式码(一至十)

第三部分:Class的设计与继承

  • 条款20:Class技术
  • 条款21:改寫虛擬函式
  • 条款22-24:Classes之间的关系
  • 条款25:使用/禁用继承

第四部分:Compiler Firewalls and Pimpl Idiom

  • 条款26-30:编译防火墙与Pimpl惯用法

第五部分:Name Lookup, Namespaces, and Interface Principle

  • 条款31-35:名称搜寻与介面准则

第六部分:Memory Management

  • 条款35-37:内存管理

第七部分:Traps, Pitfalls, and Anti-Idioms

  • 条款38-41:陷阱、易犯错误与反常作法

第八部分:Miscellaneous Topics

  • 条款42-47:杂项主题

核心思想

1. 泛型程序设计

  • Iterator是泛型程序设计的基石
  • 理解iterator_traits的重要性
  • 正确实现operator+、operator<<等

2. 异常安全性

  • 强异常安全保证(strong exception safety)
  • 基本异常安全保证(basic exception safety)
  • 不抛出异常保证(nothrow exception safety)
  • 拷贝交换惯用法(copy-and-swap idiom)是实现强异常安全的关键

3. Class设计

  • constructor应为explicit避免隐式转换
  • operator+不应修改this对象
  • operator<<应为nonmember函数
  • 虚函数应在derivation class中override时需加override关键字

4. 编译防火墙

  • Pimpl惯用法减少编译依赖
  • 头文件包含最小化原则
  • handle/body惯用法

5. 内存管理

  • auto_ptr的陷阱与替代方案
  • 自定义new/delete的使用时机
  • memory pool的性能考量

关键代码模式

copy-and-swap惯用法

T& operator=(T other) {
    swap(other);
    return *this;
}

异常安全的构造函数

  • 使用RAII管理资源
  • 确保异常发生时资源正确释放

Pimpl惯用法

// header file
class MyClass {
    class Impl;
    Impl* pImpl;
};
 
// implementation file
class MyClass::Impl { ... };

与其他知识的关联

推荐阅读顺序

  1. 先读《Effective C++》建立基础
  2. 再读本书深入异常安全和泛型编程
  3. 最后读《Effective Modern C++》了解C++11/14新特性