没有null reference,一个reference必须总代表着一个对象。pointer是可以为null的。
reference不能为null,所以使用reference可能会比pointer更有效率。
pointer可以被重新赋值,而reference总是指向它最初获得的那个对象。
当考虑不指向任何对象,或者在不同时刻可以指向不同对象时应使用pointer,如果确定一直是该对象,并且不再更改应该使用reference
在某些操作符重载的时候,需要使用reference,例如operator[]
当你需要指向某个东西,而且绝不会改变指向其他东西,或者重载操作符而语法需求无法由pointers达成,应该使用reference.任何其他时候应该使用pointer
条款二:最好使用C++转型操作符
static_cast 基本上具有与C旧式转型相同的威力与意义,以及想听听的限制
const_cast 用来改变表达式中的常量性(constness)和变易性(volatileness)。不能将const_cast用于其他的用途。const_cast最常见的就是去掉常量性
dynamic_cast 用来执行继承体系中“安全的向下转型或者跨系转型动作”。利用dynamic_cast 实现将 指向base class 的 pointer或者reference 转型为指向 derived class object的pointer或者reference,如果转型失败返回nullptr。dynamic_cast无法应用在缺乏虚函数的类型身上,也不能改变常量性。
reinterpret_cast 与平台相关,不具有可移植性。最常用的用途是转换 函数指针类型
条款三:绝对不要以多态方式处理数组
C++ 规范:通过base class 指针删除一个由derived classes objects构成的数组,其结果未定义。简单的说就是多态和指针算术不能混用。因为derived class objects 的大小比base classes 的objects的大小要大,在进行运算的时候可能会出错。
条款四:非必要不提供default constructor
classes 如果缺乏一个default constructor,当你使用这个classs时可能会有某些限制。同时如果class 缺乏default constructor 它们将不适用于许多template-based container classes.但是添加没有意义的default container 可能会影响classes的效率。