当通过引用传递成为强制通过地址/指针时

时间:2012-04-10 11:56:25

标签: c++ pointers pass-by-reference

有人可以举一些例子,其中通过引用传递优先于指针传递。

基本上两者都提供相同的功能,但我想知道哪里通过引用成为强制性的。

另外,请建议如何决定使用两者中的任何一个。

请提供一些基本的例子。

4 个答案:

答案 0 :(得分:3)

复制构造函数和赋值运算符。

struct A {
  ...
  A(const A& copy);
  A& operator = (const A& copy);
};

这些是强制性情况。除此之外,还可能存在其他情况(例如,重载其他运营商,如+<>等等。

  

另外,请建议如何决定使用两者中的任何一个。

我更喜欢大多数地方的引用(更多C ++风格),如果不能使用引用,我倾向于使用指针(更多C风格)。
 引用是const指针的某种类比表示;即A&A* const类似。因此,它们提供了一些内置的安全性,可以防止意外覆盖位置。

答案 1 :(得分:1)

我的简单经验总是倾向于在可能的地方通过引用。如果需要传递空值的能力,则必须使用pass by pointer。否则使用参考传递。

答案 2 :(得分:1)

重载运算符时,必须传递引用。 例如:

class A {
    A& operator=(const A &other);
}

答案 3 :(得分:1)

复制构造函数必须通过引用获取它们的参数。

运算符重载必须通过值或引用来获取它们的参数,而不是指针。

对于正常功能,选择是你的;虽然如果要接受空参数或动态数组,必须使用指针。

有些人喜欢尽可能使用参考文献;没有必要检查它是否为空,并且没有关于它是引用单个对象还是数组的混淆范围,或者该函数是否可能删除该对象。其他人更喜欢使用指针,因为它在调用站点提供了一个可见的指示,即该函数可能会改变对象。