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

时间:2015-03-27 01:30:46

标签: c++ c++11 move-semantics

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

Foo& operator=(Foo&&);

为什么要返回参考而不是FooFoo&&?我理解为什么我们希望这个用于常规赋值运算符,因为关联性规则(a=b)=c在逻辑上被破坏(尽管仍然可编译),如果没有通过引用返回,但为什么这是RHS是rvalue的情况(xvalue) / prvalue)?

1 个答案:

答案 0 :(得分:4)

返回Foo可能很昂贵,如果类型不可复制,则无法返回。这也是令人惊讶的:(a=b)=c会创建一个临时的,并为此分配c,当您希望这两项作业都是a时。

返回Foo&&只是奇怪;你不希望事情神秘地变成 rvalues ,以便例如f(a=b)意外地从a移出而没有你告诉它。

返回Foo&是一种传统的方法,如果你将它链接起来,操作员的表现就不会令人惊讶了。