Item 1:仔细区分pointers和references
- 没有null reference,但是pointer可以为null。
char *pc = 0;
char& rc = *pc;
这是有害的行为,其结果是不可预期的。
- reference必须有初值,但pointer没有这样的限制。
使用reference可能比使用pointer更有效率,因为使用reference之前不需测试其有效性。(如果是pointer,通常需测试它是否为null)
- pointers可以被重新赋值而指向另一个对象,reference却总是指向它最初获得的那个对象。
pointer:不指向任何对象;在不同的时间指向不同的对象。
reference:总是会代表某个对象;一旦代表了该对象就不再改变;返回“能够被当作assignment赋值对象”的操作符。
Item 2:最好使用C++转型操作符
- const_cast:去除对象的constness。
- dynamic_cast:安全的向下转型或跨系转型动作,能得知转型是否成功。不成功时,pointer返回null,reference抛出exception。(无法应用于没有virtual函数的类型上)
- reinterpret_cast:转换结果几乎总是与编译平台息息相关。其不具一致性。最常用途:转换“函数指针”类型