目录
条款2:尽量以 const、enum、inline 替换 #define
条款1:视C++为一个语言联盟
1、C++ 分为四个次语言,C、object-oriented C++、Template C++、STL。
2、四个语言都有自己的规约,使用不同次语言时遵守不同的守则会使得开发更高效。
3、对于内置类型而言,pass-by-value效率高于pass-by-reference。对于用户自定义类型而言,pass-by-reference效率高于pass-by-value。
条款2:尽量以 const、enum、inline 替换 #define
1、定义常量时尽量使用 const、enum 代替 #define。
2、定义不可取址、不可引用的常量时尽量使用 enum 代替 #define。
3、定义类似函数的宏时尽量使用 inline 代替 #define。
4、在防止头文件重复包含时依然使用 #define。
条款3:尽可能使用 const
1、如果 const 出现在 * 号左边,表示被指物是常量。如果 const 出现在 * 号的右边,表示指针自身是常量。
2、const Widget *pw 和 Widget const *pw 两种形式效果一样,都是指向常量 Widget 对象。
3、const std::vector<int>::iterator 等价于 T* const,std::vector<int>::const_iterator 等价于 const T*。
4、const 成员函数可以使用 mutable 摆脱 const 的约束。
5、当 const 和 non-const 成员函数有着实质的等价实现时,令 non-const 版本调用 const 版本可避免代码重复。
条款4:确定对象使用前已先被初始化
1、为内置类型进行手动初始化,因为 C++ 不保证初始化它们。
2、构造函数最好使用初始化成员列表,而不要在构造函数内使用赋值操作。初始化列表列出的初始化顺序应该和类体中成员变量定义顺序保持一致。
3、为避免 “跨编译单元之初始化次序” 问题,请使用 "local static" 对象替换 "non-local static" 对象。
持续更新......