为什么C ++赋值运算符需要返回类型?

时间:2015-06-29 07:30:07

标签: c++

我正在查看C ++类的赋值运算符:

A& operator= (const A& x) {
  // do something 
  return *this;
}

然而,为什么我们需要返回*这个?因为如果我们打电话

a = b b是operator =的参数,这指向a。 //通过从b复制,做了一些已经改变了a的正确内容的东西。如何获得返回类型?这次回归的收件人是什么?

或者,这是为了促进a = b = c?

请指教..谢谢!

4 个答案:

答案 0 :(得分:6)

您不需要从作业运营商处返回对\s*的引用; this是有效的返回类型。但是,由于您声明的原因,这是一个强有力的约定:它有助于分配链接。

答案 1 :(得分:1)

像你说的那样。在赋值运算符中具有返回类型允许例如

(a = b).method();

虽然它看起来有点奇怪......当然你可以退回虚空。

答案 2 :(得分:0)

因此它的行为与内置类型相同

 A = b = c;

答案 3 :(得分:0)

由于赋值运算符从右到左分组,因此需要返回* this(这是一个比对象更重要的参考)来支持以下内容:

(a = b) = c

这在(丑陋的)情况下很有用,b是带副作用的函数调用,更重要的是,它与builtin =一致。

请注意支持

a = b = c

operator =不需要返回引用,值也可以,因为后者等同于

a = (b = c)

这样的东西
(a=b).f()
如果operator =返回值而不是引用,

也会起作用。