More Effective C++ 读书笔记

 

条款 1:仔细区别 pointers 和 references

  • 没有空引用,引用必须有初始值,指针可以是空指针。
  • 指针可以被重新赋值,指向另一个对象,引用却总是指向(代表)它最初获得的那个对象。
  • 一般而言,当你需要考虑“不指向任何对象”的可能性时,或是考虑“在不同时间指向不同对象”的能力时,你就应该采用 pointer。前一种情况你可以将 pointer设为 null,后一种情况你可以改变 pointer 所指对象。而当你确定“总是会代表某个对象”,而且“一旦代表了该对象就不能够再改变”,那么你应该选用reference。
  • 当你知道你需要指向某个东西,而且绝不会改变指向其他东西,或是当你实现一个操作符而其语法需求无法由 pointers 达成,你就应该选择references。任何其他时候,请采用 pointers。

条款 2:最好使用 C++ 转型操作符

  • static_cast 用于非多态类型的转换。不执行运行时类型检查(转换安全性不如 dynamic_cast)。通常用于转换数值数据类型(如 float -> int)
  • const_cast 最常见的用途就是将某个对象的常量性去除掉。
  • dynamic_cast,用来执行继承体系中“安全的向下转型或跨系转型动作”,即将指向基类的指针转换为指向子类的指针,如果转换失败则返回空指针。
  • reinterpret_cast 的最常用用途是转换“函数指针”类型