应该重载运算符=返回类或类

Should overloaded operator = be returning class& or class

本文关键字:返回 运算符 重载      更新时间:2023-10-16

在谷歌上搜索如何重载运算符时,我发现一些例子返回值http://www.cprogramming.com/tutorial/operator_overloading.html
,而我的一个朋友,很久以前就是C++大师,告诉我要返回参考。例如,当我查看STL源代码时,我看到了以下内容:

  vector&
  operator=(const vector& __x);

那么正确的方法是什么呢?

顺便说一句,如果你好奇的话,我的朋友告诉我,返回ref的原因是beause内置类型return l-value。

int x;
(x = 3) += 2;
// x is now 5.

除了您真的、真的知道自己在做什么的特殊情况外,它应该返回class&void。(大多数时候,返回void应该只是"我很懒,还没有抽出时间来确保返回class&是有意义的"的占位符)

返回class是个坏主意,因为在用户不使用返回值的正常情况下,它会浪费时间和内存(它会进行复制!),并且会彻底误导实际使用返回值(并且仍然会浪费时间进行复制)的用户。

是的,它应该返回一个对self的引用。

在保存内存和时间时使用引用总是很好的。如果传递值,则必须创建新对象,必须调用复制构造函数。这在时间和内存方面都更昂贵。

所以总是通过引用传递它,除非您有非常强烈的必要通过值传递/返回它。