1.视C++为一个语言联邦
C++有四个次语言组,按照高效编程守则,应选择的参数传递方式
- C. pass-by-value, Object-Oriented C ++.pass-by-reference-to-const(因为有用户自己定义的构造函数和析构函数)
- Template C++.pass-by-reference-to-const(泛型编程甚至不知道所处理的对象的类型)
- STL. pass-by-value(因为迭代器和函数对象都是在C指针之上塑造出来的)
2.尽量用const,enum,inline替换#define
- 即以编译器替换预处理器。
- 对于单纯的常量,用const和enum代替#define.
- 对于形似函数的宏,使用inline函数替换#define.
3.尽可能使用const
const可以施加于:
对象
函数参数(如输入参数的const引用)
函数返回值
成员函数后加const,表明不改变成员变量。
注意修饰指针的时候,到底是指针是const,还是指针指向的data是const
如const char* p = ……data是const
char* const p = ……指针是const
4.确定对象被使用前先被初始化
- 对于内置类型的对象,使用之前先手动初始化,因为c++不保证会初始化他们。其他的用构造函数初始化。
- 构造函数里的赋值并不是初始化,应该用初始化参数列表 member initialization list进行初始化。参数列表的次序与class中声明的顺序相同,不是必须的,但是为了减少不必要的麻烦,就这么做就可以了。
- 跨编译单元时,初始化次序让人迷惑,用reference-returning函数内的local static 对象替换non-local static对象。(p32)