【发布时间】:2016-03-26 05:58:45
【问题描述】:
我在互联网上浏览了一些关于运算符重载的示例,其中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);
【问题讨论】:
-
“既然我们不能链接
+=”?为什么不?(((a += b) += c) += d)或a += (b += (c += d)))。它与以往一样可链接。 -
@AnT 是的,但是我们不需要返回任何东西,我猜。因为更改是在 LHS 中进行的,它将可用于下一次操作。所以不需要
T&作为回报。 -
但是如果你想把它链起来,你必须返回一些东西。
-
@AnT 你是对的,如果返回无效,就会得到
error: invalid operands to binary expression ('void' and 'MyInteger')。 -
@jblixr -- 为什么要违背约定?
operator+=应该返回对当前对象的引用。MyInteger& operator+=(const MyInteger&);此外,您可以通过以+=实现operator +。
标签: c++ c++11 operator-overloading