Scott Meyers. Effective C++: 55 Specific Ways to Improve Your Programs and Designs. 电子工业出版社. 侯捷译. 第三版
本书局限于 C++ 98 说实在有点过时。
C++ 11 是十分有必要学习的,快速把本书过完吧,然后再学 STL -> More Effective C++ -> Modern Effective C++
。
- 1 | 让自己习惯 C++
- 2 | 构造/析构/赋值运算
- 3 | 资源管理
- 4 | 设计与声明
- 5 | 实现
- 6 | 继承与面型对象设计
- 7 | 模板与泛型编程
- 8 | 定制 new 和 delete
- 9 | 杂项讨论
- 导读部分
- 01 | 视 C++ 为一个语言联邦
- 02 | 尽量以 const, enum, inline 替换 ./drafts/cpp55.01.know.md#define
- 03 | 尽可能使用 const
- 04 | 确定对象被使用前已先被初始化
./drafts/cpp55.02.constructors.destructors.assignment.md
- 05 | 了解 C++ 默默编写并调用哪些函数
- 06 | 若不想使用编译器自动生成的函数,就该明确拒绝
- 07 | 为多态基类声明 virtual 析构函数
- 08 | 别让异常逃离析构函数
- 09 | 绝不在构造和析构过程中调用 virtual 函数
- 10 | 令 operator= 返回一个 reference to *this
- 11 | 在 operator= 中处理“自我赋值”
- 12 | 复制对象时勿忘其每一个成份
./drafts/cpp55.03.resource.management.md
- 13 | 以对象管理资源
- 14 | 在资源管理类中小心 copying 行为
- 15 | 在资源管理类中提供对原始资源的访问
- 16 | 成对使用 new 和 delete 时要采取相同形式
- 17 | 以独立语句将 newed 对象置入智能指针
./drafts/cpp55.04.designs.declarations.md
- 18 | 让接口容易被正确使用,不易被误用
- 19 | 设计 class 犹如设计 type
- 20 | 宁以 pass-by-reference-to-const 替换 pass-by-value
- 21 | 必须返回对象时,别妄想返回其 reference
- 22 | 将成员变量声明为 private
- 23 | 宁以 non-member 、 non-friend 替换 member 函数
- 24 | 若所有参数皆需类型转换,请为此次采用 non-member 函数
- 25 | 考虑写出一个不抛出异常的 swap 函数
./drafts/cpp55.05.implementations.md
- 26 | 尽可能延后变量定义式的出现时间
- 27 | 尽量少做转型动作
- 28 | 避免返回 handles 指向对象内部成份
- 29 | 为“异常安全”而努力是值得的
- 30 | 透彻了解 inlining 的里里外外
- 31 | 将文件间的编译依存关系降至最低
./drafts/cpp55.06.inheritance.md
- 32 | 确定你的 public 继承塑模出 is-a 关系
- 33 | 避免遮掩继承而来的名称
- 34 | 区分接口继承和实现继承
- 35 | 考虑 virtual 函数以外的其他选择
- 36 | 绝不重新定义继承而来的 non-virtual 函数
- 37 | 绝不重新定义继承而来的缺省参数值
- 38 | 通过复合塑模出 has-a 或“根据某物实现出”
- 39 | 明智而审慎地使用 private 继承
- 40 | 明智而审慎地使用多重继承
./drafts/cpp55.07.templates.generic.md
- 41 | 了解隐式接口和编译期多态
- 42 | 了解 typename 的双重意义
- 43 | 学习处理模板化基类内的名称
- 44 | 将与参数无关的代码抽离 templates
- 45 | 运用成员函数模板接受所有兼容类型
- 46 | 需要类型转换时请为模板定义非成员函数
- 47 | 请使用 traits classes 表现类型信息
- 48 | 认识 template 元编程