为什么重载赋值运算符返回对类的引用?

suk*_*mar 5 c++

class item {
public:
    item& operator=(const item &rh) {
        ...
        ...
        return *this;
    }
};
Run Code Online (Sandbox Code Playgroud)

以下签名是错误的吗?

void operator=(const item &rh);
Run Code Online (Sandbox Code Playgroud)

item a, b;
a = b; // equivalent to a.operator=(b); so there is no need to return this.
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 10

这不是"错误的",而是令人惊讶的.赋值评估目标对象.这就是内置意义.如果你为自己的班级定义不同,人们可能会感到困惑.

例:

int c;
while((c = getchar()) != EOF) {
  // ...
}
Run Code Online (Sandbox Code Playgroud)

c返回c自己的任务并将其与EOF之后进行比较.用户希望您的item课程表现相似.


Vla*_*lad 5

带有void的签名不允许链接赋值:

a = b = c;
Run Code Online (Sandbox Code Playgroud)

(请查看Johannes关于基于返回指定值的赋值的使用模式的另一个示例的答案.)

这就是为什么不鼓励使用这种签名的原因.但是,如果我没有弄错,你实际上可以使用这样的签名.