【问题标题】:Return by reference and operator chaining通过引用和运算符链接返回
【发布时间】:2014-01-26 21:08:36
【问题描述】:

为什么要通过引用返回运算符链接?

我已经查看了很多关于 SO 的答案,并且常用短语是“通过引用返回以允许运算符链接”,但没有解释,我不明白为什么我不能以其他方式做到这一点。

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

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

我也可以这样做:

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

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

【问题讨论】:

  • 第一个编译成功了,但它真的如你所愿吗?

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


【解决方案1】:

并且链接有效

不,它没有。

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

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

【讨论】:

  • 完全正确。我只看a += b += c 的案例,而不是像上面那样改变评估顺序的括号案例。现在清理了 :) 谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 2012-01-01
  • 2020-07-09
  • 1970-01-01
  • 1970-01-01
  • 2012-08-24
  • 1970-01-01
相关资源
最近更新 更多