MEC | 条款1 仔细区别pointers和references

More Effective C++(MEC)

MEC | 条款1 仔细区别pointers和references_第1张图片

文章目录

  • 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. 当你知道你需要指向的某个东西,而且绝不会改变指向其他东西,或者当你实现1个操作符而其语法无法由 pointers 达成,你就应该选择 reference。

  2. 任何其他时候,请采用 pointers。

你可能感兴趣的:(c++,开发语言)