繁体   English   中英

为什么不在 operator= 中返回 const-reference 而不是引用?

[英]Why not return const-reference in operator= instead of a reference?

在赋值运算符重载时,为什么我们返回对 object 的引用,为什么它不能返回 const 引用? 例如,在这种情况下:

MyClass& MyClass::operator=(const MyClass &rhs) {
    ...  // Do the assignment

    return *this;
  }

为什么我们不能返回一个常量引用,例如:

const MyClass& MyClass::operator=(const MyClass &rhs) {
    ...  // Do the assignment operation!

    return *this;  // Return a reference to myself.
  }

你可以,但MyClass的用户可能会感到惊讶。

通常,可以对分配进行引用(并且在较少情况下,可以再次分配分配)。 正确用词有点令人困惑,所以它看起来像这样:

int a = 4;
int &r = a = 5;
(a = 6) = 7;

这也不允许调用修改 function 的 arguments 的成员函数,例如:

#include <iostream>

struct C
{
    int value;
    const C &operator=(int v){value = v; return *this;}
};

void assign_value(C &ref)
{
    ref %= 4;
}

int main(void)
{
    C test;
    assign_value(test = 5);
    std::cout << c.value << '\n';
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM