我已经在互联网上浏览了一些运算符重载的例子,其中 operator+=
的返回类型是 T&
。由于我们不能像 +=
那样链接 T a = b = c;
,因此可以将返回类型声明为 void
。使用 void
时,一切似乎都能正常工作。有什么情况是我们必须避免的吗?
例如:
class MyInteger{
private:
int x;
public:
MyInteger(const int& a):x(a){}
void operator+=(const MyInteger& rhs){
x += rhs.x;
}
};
MyInteger a(10);
a += a; //No need to return anything because we can't chain
a = a + (a += a);
最佳答案
您希望 operator +=
返回对当前对象的引用的另一个原因是您想重载 operator +
。由于您正在编写一个整数类,因此如果 +=
可用,则没有多大意义,但 +
不可用。
这是 operator +
的样子:
MyInteger MyInteger::operator+(const MyInteger& rhs)
{
MyInteger temp(*this);
return temp += rhs; // <-- Uses operator +=
}
如果
operator +=
没有返回引用,则上述内容将无法工作(甚至无法编译)。关于c++ - 重载时返回运算符+= 的类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36232136/