c++ - 运算符重载 C++ 引用或值

标签 c++ c++11 operator-overloading return-by-reference return-by-value

我看过很多教程并试图在 stackoverflow 上找到答案但没有成功。

我不确定的是;在重载运算符时,是否有一些实践是按值返回还是按引用返回?

例如

Class &operator+(){
  Class obj;
  //...
  return obj;
}

或相同的东西,但按值(value)

Class operator+(){
  Class obj;
  //...
  return obj;
}

我想提一下,我注意到在几乎 90% 的情况下,当返回相同的对象 (*this) 时,会引用返回的相同对象。有人也可以解释为什么会这样吗?

最佳答案

operator+按引用返回的第一个选项是错误的,因为你是按引用返回局部对象,但局部对象在运算符函数体结束后不复存在。一般:

  • +=-= 等变异运算符通过引用返回,因为它们返回变异对象本身(通过:return *this; )
  • +- 等普通运算符应该按值返回,因为需要构造一个新对象来保存结果。

关于c++ - 运算符重载 C++ 引用或值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36908345/

相关文章:

c++ - 当作为 Function 的参数传递给线程时,为什么仿函数的 dtor 调用两次(多次)?

c++ - 我将如何编辑此代码以使最小堆成为可能?

C++运算符重载(v << 1,2,3;)?

c++ - 重载的赋值运算符不起作用

c++ - 类模板的算术运算符重载,运算符应该取两个不同类型的类

c++ - 使用 STL 容器设置 upper_bound

c++ - 使用 boost 或 STL 对 C++ 中的压缩(锁定)容器进行排序

c++ - clang 使用了错误的系统包含目录

c++ - 如何在 OpenGL 中执行矩形剪切

c++ - 向 QTableWidget 添加水平 slider