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

why C++ assignment operator need a return type?

本文关键字:返回类型 赋值运算符 C++ 为什么      更新时间:2023-10-16

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

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

但是,为什么我们需要返回这个?因为如果我们调用

a=bb是运算符=的参数,它指向a。//通过从b复制已经更改了a的正确内容的操作。如何获取返回类型?这份报税表的收件人是谁?

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

请告知。。谢谢

您不需要从赋值运算符返回对this的引用;void是有效的返回类型。然而,由于您所说的原因,这是一个强有力的约定:它有助于任务链。

就像你说的。在分配运算符中具有返回类型允许例如

(a = b).method();

虽然看起来确实有点奇怪。。。当然你可以直接返回虚空。

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

I.e

 A = b = c;

由于赋值运算符从右到左分组,因此需要返回*this(因此引用高于对象)来支持以下内容:

(a = b) = c

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

请注意,要支持

a = b = c

运算符=不需要返回引用,值也可以,因为后者等效于

a = (b = c)

类似的东西

(a=b).f()

如果operator=返回一个值而不是引用,也会起作用。