为什么我们在赋值运算符重载中使用引用返回而不是在加减运算中?

新手上路,请多包涵

正如我在书籍和网络中所读到的,在 C++ 中,我们可以使用这些原型重载“加号”或“减号”运算符(作为 class Money 的成员函数):

const Money operator +(const Money& m2) const;

const Money operator -(const Money& m2) const;

对于赋值运算符:

const Money& operator =(const Money& m2);

为什么在赋值运算符重载中而不是在加号和减号运算符中使用对 Money 对象的引用作为返回值?

原文由 MinimalTech 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 410
1 个回答

从赋值返回引用允许链接:

 a = b = c;  // shorter than the equivalent "b = c; a = b;"

(如果运算符返回新值的副本,这也可以(在大多数情况下)起作用,但这通常效率较低。)

我们不能从算术运算中返回引用,因为它们会产生一个新值。返回新值的唯一(明智的)方法是按值返回。

正如您的示例所做的那样,返回一个常量值会阻止移动语义,所以不要这样做。

原文由 Mike Seymour 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题