为什么移动分配运算符应该返回对此的引用

Why move assignment operator should return reference to *this

本文关键字:引用 返回 移动 分配 运算符 为什么      更新时间:2023-10-16

有人能解释为什么移动分配运算符(通常)被声明为吗

Foo& operator=(Foo&&);

为什么不返回引用,例如FooFoo&&?我理解我们为什么要将其用于正则赋值运算符,因为如果不通过引用返回,(a=b)=c等关联性规则在逻辑上会被破坏(尽管仍然是可编译的),但为什么RHS是右值(xvalue/prvalue)时会出现这种情况?

如果类型不可复制,则返回Foo可能代价高昂,而且是不可能的。同样令人惊讶的是:(a=b)=c会创建一个临时的,并将c分配给它,而您希望这两个分配都是a

返回Foo&&很奇怪;你不希望事物神秘地变成右值,例如f(a=b)在你没有告诉它的情况下意外地从a移动。

返回Foo&是一种传统的方法,如果您将其链接起来,它会使操作员以一种令人惊讶的方式行事。