条款 1:视 C++ 为一个语言联邦#
除了过程、对象、模板、函数四种编程范式,还有元编程形式,其可包括在泛型编程里,即模板;STL 就是元编程的一个典范
- 可体会学习 C++ 的方法
条款 2:尽量以 const/enum/inline 替换 #define#
能不用 #define 就不用,为了方便调试;而用 define 容易掩盖错误,因为所有宏对编译器不可见
- 对于单纯常量,最好用 const 对象或者 enums
- 对于形似函数的宏,最好用 inline 函数
条款 3:尽可能使用 const#
数据意义上的 const VS. 逻辑意义上的 const
- 编译器强制实施前者,我们编写程序时使用后者
- 前者:真正数据意义上的 const 是很难实现的,涉及到指针,可能通过其他方式改变数据
- 后者:核心的数据没变,就可以认为是逻辑意义上的 const
PS:const 对象和方法
- const 对象:不能调用非 const 方法,因为非 const 方法内的变量可能发生改变
- const 方法
- 内部是不能修改成员属性的
- mutable 变量:逻辑上的 const,虽然变量可改变,但不是核心数据
条款 4:确定对象被使用前已经先被初始化#
1、手动初始化内置型对象
- C++ 并不保证会初始化内置型对象
2、构造函数的赋值最好使用初始化列表
- 初始化列表调用的是构造函数
- 构造函数和赋值运算符在 C++ 中完全是两个概念
- 构造函数主要负责对象初始化
- 初始化列表(初值列)列出的成员顺序应该与它们在类内声明的顺序一致
- 所见顺序即实际顺序,方便维护
- 即使反着写,程序还是按照声明顺序初始化变量
- 减少 “跨编译单元之初始化次序” 问题,以 local static 对象替换 non-local static 对象
- 尽量跨文件初始化的依赖关系