有人可以举一些例子,其中通过引用传递优先于指针传递。
基本上两者都提供相同的功能,但我想知道哪里通过引用成为强制性的。
另外,请建议如何决定使用两者中的任何一个。
请提供一些基本的例子。
答案 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)
复制构造函数必须通过引用获取它们的参数。
运算符重载必须通过值或引用来获取它们的参数,而不是指针。
对于正常功能,选择是你的;虽然如果要接受空参数或动态数组,必须使用指针。
有些人喜欢尽可能使用参考文献;没有必要检查它是否为空,并且没有关于它是引用单个对象还是数组的混淆范围,或者该函数是否可能删除该对象。其他人更喜欢使用指针,因为它在调用站点提供了一个可见的指示,即该函数可能会改变对象。