2

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

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

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

请提出一些基本的例子。

4

4 回答 4

3

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

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

这些是强制性的情况。除了这些之外,还可能存在其他情况(例如重载其他运算符,如,+等)。<>

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

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

于 2012-04-10T11:58:32.643 回答
1

我的简单经验法则是在可能的情况下总是更喜欢通过引用传递。如果您需要传递空值的能力,那么您必须使用指针传递。否则使用按引用传递。

于 2012-04-10T11:58:40.633 回答
1

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

class A {
    A& operator=(const A &other);
}
于 2012-04-10T11:59:43.700 回答
1

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

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

对于普通功能,您可以选择;尽管如果要接受空参数或动态数组,则必须使用指针。

有些人喜欢尽可能使用引用;无需检查它是否为空,也无需混淆它是指单个对象还是数组,或者函数是否可能删除该对象。其他人更喜欢使用指针,因为它在调用站点提供了一个可见的指示,表明该函数可能会更改对象。

于 2012-04-10T12:10:10.467 回答