为什么移动赋值运算符应返回对* this的引用

vso*_*tco 3 c++ move-semantics c++11

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

Foo& operator=(Foo&&);
Run Code Online (Sandbox Code Playgroud)

为什么返回引用而不返回eg FooFoo&&?我理解为什么我们要对常规赋值运算符使用此方法,因为(a=b)=c如果没有通过引用返回,则关联规则在逻辑上被破坏(尽管仍然可以编译),但是为什么RHS是右值(xvalue / prvalue)时会出现这种情况?

Mik*_*our 5

返回Foo可能很昂贵,如果类型不可复制,则返回是不可能的。同样令人惊讶的是:当您期望两个分配都为时,(a=b)=c会创建一个临时分配c给它a

回来Foo&&真是奇怪。您不希望事物神秘地变成右值,以便例如在您不告诉的情况下f(a=b)意外地从右移a

Foo&如果将其链接起来,返回是使操作员表现出令人惊讶的常规方式。