More Effective C++(MEC)
文章目录
- More Effective C++(MEC)
- 条款1 仔细区别pointers和references
- 结论
本章描述 pointers 和 references 的差异,并告诉你它们适当使用时机。
条款1 仔细区别pointers和references
pointers 使用 “*” 和 "->"操作符,reference 使用“.”,它们似乎做着类似的事情。
区别是,没有 null reference!一个 reference 必须总代表某个对象。如果使用了 reference,必然有个对象已经存在。
如果可能不指向任何对象,那么应该使用 pointer, pointer 可以设为 null。
看一段代码:
char *pc = 0; // pointer 设为 0
char& rc = *pc; // 让 reference 代表 null pointer的解引用值
这是有害行为,结果不可预期(C++没有定义),编译器可以产生任何可能的输出。
因此,reference 一定代表某个对象,而且有初值。
因为有初值,所以reference 不需要考虑其有效性,不用判断是否为空。
void PrintNum(const double& cd) {
cout << cd; // 不需要测试 cd , 它一定代表某个 double
}
void PrintNum(const double *pd) {
if(pd) { // 检查是否为 nullptr
cout << *pd;
}
}
另一个重要不区别:
pointers 可以被重新赋值,指向另一个对象,reference 总是指向(代表)它最初获得的那个对象。
结论
-
当你知道你需要指向的某个东西,而且绝不会改变指向其他东西,或者当你实现1个操作符而其语法无法由 pointers 达成,你就应该选择 reference。
-
任何其他时候,请采用 pointers。