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

C++ 当通过引用传递成为通过地址/指针传递的强制时,c++,pointers,pass-by-reference,C++,Pointers,Pass By Reference,有人可以举一些例子,其中引用传递优于指针传递 基本上两者都提供相同的功能,但我想知道在哪里通过引用传递成为必需的 另外,请建议如何决定使用这两种方法之一 请提供一些基本示例。复制构造函数和赋值运算符。 struct A { ... A(const A& copy); A& operator = (const A& copy); }; 这些都是强制性的情况。除此之外,还可能存在其他情况(例如,重载其他运算符,如+,等) 另外,请建议如何决定使用这两种方法之一

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

基本上两者都提供相同的功能,但我想知道在哪里通过引用传递成为必需的

另外,请建议如何决定使用这两种方法之一


请提供一些基本示例。

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

struct A {
  ...
  A(const A& copy);
  A& operator = (const A& copy);
};
这些都是强制性的情况。除此之外,还可能存在其他情况(例如,重载其他运算符,如
+
等)

另外,请建议如何决定使用这两种方法之一

我喜欢大多数地方的引用(更多C++风格),如果不能使用引用,我倾向于使用指针(更多的C风格)。


引用在某种程度上类似于
常量
指针的表示;i、 e.
A&
类似于
A*const
。因此,它们提供了一些内置的安全性,以防止意外覆盖位置。

我的简单经验法则是,在可能的情况下,总是倾向于按引用传递。如果需要传递空值,则必须使用指针传递。否则使用按引用传递。

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

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

复制构造函数必须通过引用获取其参数

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

对于正常功能,由您选择;但如果要接受空参数或动态数组,则必须使用指针


有些人喜欢尽可能使用参考资料;不需要检查它是否为null,也不需要混淆它是否引用单个对象或数组,或者函数是否可能删除该对象。其他人更喜欢使用指针,因为它在调用站点上给出了函数可能更改对象的可见指示。

这是作业吗?请添加标签。如果需要的话,只需要一些更好的解释:可能的副本:Bjarne已经回答了在他的样式指南中添加C++的直接原因。实际上,对于赋值运算符来说,按引用传递不是强制性的(从标准来看,按引用返回也不是强制性的)。在使用复制和交换习惯用法时,可以简单地传递值,这可能有利于复制和交换。