通过引用和操作员链接返回

时间:2014-01-26 21:08:37

标签: c++ operator-overloading return-value chaining

为什么通过引用返回操作符链接?

我在SO上看了很多答案,而且股票短语是“通过引用返回以允许操作符链接”,但没有解释我不明白为什么我不能以其他方式做到。

例如,这似乎在我的系统上编译并且工作正常,链接工作:

TestClass operator+=(TestClass tc){
    somePrivateValue += tc.somePrivateValue;
    return *this;
}

我也可以这样做:

TestClass& operator+=(TestClass& tc){
    somePrivateValue += tc.somePrivateValue;
    return *this;
}

排除第二个例子不需要为TestClass调用复制构造函数的事实还有什么其他优点?

1 个答案:

答案 0 :(得分:2)

  

和链接工作

不,它没有。

TestClass a = some_value;
TestClass b = some_other_value;
(a += b) += b;

现在检查a的值,但是已经完成了。它是否反映了b两次递增?或者只有一次?