【问题标题】:why C++ assignment operator need a return type? [duplicate]为什么 C++ 赋值运算符需要返回类型? [复制]
【发布时间】:2015-06-29 07:30:07
【问题描述】:

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

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

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

a = b b是operator=的参数,this指向a。 // 通过从 b 复制已经改变了 a 的正确内容。将如何获得返回类型?此退货的收件人是什么?

或者,这是为了方便a = b = c?

请指教..谢谢!

【问题讨论】:

  • 赋值是 C++ 中的一个表达式。并且返回 *this 让您与普通旧数据类型的行为保持同步。

标签: c++


【解决方案1】:

您不需要从赋值运算符返回对this 的引用; void 是有效的返回类型。但是,由于您陈述的原因,它是一个强大的约定:它有助于分配链。

【讨论】:

    【解决方案2】:

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

    (a = b).method();
    

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

    【讨论】:

      【解决方案3】:

      使其行为与内置类型相同

       A = b = c;
      

      【讨论】:

        【解决方案4】:

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

        (a = b) = c
        

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

        注意支持

        a = b = c
        

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

        a = (b = c)
        

        类似

        (a=b).f()
        

        如果 operator = 返回一个值而不是一个引用,也可以工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-01
          • 1970-01-01
          • 2021-02-20
          • 1970-01-01
          • 1970-01-01
          • 2012-04-27
          相关资源
          最近更新 更多