More Effective C++ (基础议题)
3.1:指针与引用的区别
<1> 指针用操作符“*”和“->”;引用使用操作符“.”
<2> 任何时候都不能使用指向空值的引用。即就是一个引用必须总是要指向某个对象通俗一点,
就是说,如果你的设计不允许变量为空,这时就把变量声明为引用
<3> 不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高
<4> 未初始化的指针合法但危险
<5> 指针应该总是被测试
<6> 指针与引用的重要区别在于:指针可以被重新赋值以指向另一个不同的对象
<7> 当你重载某个操作符时,应该使用引用
<8> 考虑到存在不指向任何对象的可能时使用指针
<9> 能够在不同的时刻指向不同的对象时使用指针
3.2:尽量使用C++风格的类型转换
<1> 四个操作符:static_cast,const_cast,dynamic_cast,reinterpret_cast
<2> 使用写法:
static_casr<type>(expression)
<3> static_cast不可以把struct转换成int或者把double类型转换为指针类型
<4> static_cast不能从表达式中去除const属性
<5> const_cast用于类型转换掉表达式的const或者volatilenness属性
<6> dynamic_cast用于安全的沿着类的继承关系向下进行类型转换。即就是:能用dynamic_cast把指向基类的指针或者引用转换成指向其派生类或其兄弟类的指针或者引用
<7> danamic_cast失败转换将返回空指针
<8> 如果你想没有继承关系的类型中进行转换,你可能想到static_cast
<9> 如果是为了去除cosnt,你总得用const_cast
<10> 使用reinterpret_cast操作符的类型转换,其转换结果几乎都是执行期定义,因此,使用这个的代码很难移植
<11> reinterpret_cast的最普通的用途就是在函数指针类型之间进行转换
<12> 不到万不得已的情况不要使用reinterpret_cast
3.3:不要对数组使用多态
3.4:避免无用的缺省构造函数
<1> 缺省构造函数就是每个类中在程序员没有定义任何构造函数的情况之下,系统为类添加的那个默认的无参构造函数
<2> 一个类没有缺省构造函数。在以下二种情况下使用,会遇到问题:
第一:建立数组
NoConClass Array[10];
第二:
NoConClass *p = new NoConClass[10];
<3> 虚基类的缺省构造函数问题