◆条款01: 视C++为一个语言联邦
C++可以理解为由下面四个部分组成,针对每个部分的编程原则是不一样的,具体编程时要明确你拿它做什么用。
・传统的C语言,效率考虑
・在传统C语言的基础上添加面向对象的能力
・泛型编程(模板)
・STL(标准模板库)
◆条款02: 尽量以const、enum、inline代替#define
・宏不会进入编译器的符号表(symbol table)中,所以会带来调试时的麻烦。
・宏定义的函数可以用内联的模板函数来替代。
◆条款03: 尽量使用const
・const出现在“*”号左侧表示指向的是常量,如果出现在右侧,表示该指针是常量,如果两侧都有const,则表示指针和指向的都是常量,不可修改或赋值。
・const成员函数让编译器在编译的时候就可以检查是否满足该函数不修改对象内任何非静态成员变量的约定,但是如果必须要修改某个非静态成员变量,可以用“mutable”限定该成员变量。
・可以用const成员函数来实现同一功能的非const函数,这是通过强制类型转化来实现的,但反之则不可。
◆条款04: 确定对象被使用前已先被初始化
・我们不能依赖于编译器的初始化,任何变量初始化之前都必须手动初始化。
・类的成员变量初始化时用冒号语法比在构造函数里进行赋值的效率要高,因为冒号语法里只调用默认的构造函数来初始化成员变量,不用进行赋值操作。
・静态变量的初始化时,一定要考虑初始化的顺序,避免使用一个还未初始化的静态变量,可以 通过包装该静态变量(在一个新的函数里定义该静态变量,并立即返回,这样可以保证编译器在该函数被首次调用时才初始化)的方法来避免这种问题的发生。