条款1:仔细区别pointer和reference
1)pointer可以是null,可以重新赋值指向不同的对象;reference不可以是null,无法修改指向对象。
2)常用操作符重载时,用引用。原文例子:
vector<int> v(10)
v[5]=0;
重载的vector.[]操作时,返回引用。
个人总结:看个人习惯,应用更可靠一点,指针灵活一点,减少值传递,多用引用传递。
条款2:最好使用C++转型操作符
C风格的转型操作:
(type) expression
C++风格的转型:
static_cast<type>(expression):常用,和C风格的功能基本相似,但多了一些编译期约束报错,大部分情况用这个。
const_cast<type>(expression):特殊情况使用,将const的变量、去掉const属性,但必须是指针或引用作为左值。
dynamic_cast<type>(expression):特殊情况使用,基类必须有虚函数、将基类指针指向派生类的指针,转成派生类指针指向派生类(安全的向下转换),运行期校验
个人总结:C++风格的类型转换优点多多,可以百度仔细学学。但是又臭又长(侯杰说的),确实我个人在使用时不知不觉就会换成C的。
条款3:绝对不要以多态(polymorphically)方式处理数组
个人总结:多态和指针算数不能混用,同样多态和指针数组也不能混用,原因是指针++操作时内存操作混乱。根本原因是C++规范不支持。但是我们一般也很少遇到
条款4:非必要不提供default constructor
个人总结:实际工作中写的类,太多情况需要default constructor,如果一个类不需要default constructor,改成私有函数?