为什么移动赋值运算符应该 return 引用 *this
Why move assignment operator should return reference to *this
有人可以解释为什么移动赋值运算符(通常)声明为
Foo& operator=(Foo&&);
为什么 return 是参考而不是例如Foo
还是 Foo&&
?我理解为什么我们想要常规赋值运算符,因为关联性规则 (a=b)=c
在逻辑上被破坏(尽管仍然可编译)如果不是 return 通过引用编辑,但为什么 RHS 时会出现这种情况是右值 (xvalue/prvalue)?
返回 Foo
可能代价高昂,如果类型不可复制则不可能。这也令人惊讶:(a=b)=c
会创建一个临时对象并将 c
分配给它,而您希望这两个分配都是 a
.
返回 Foo&&
很奇怪;你不希望事情神秘地变成 rvalues 这样例如f(a=b)
在您未告知的情况下意外地从 a
移动。
返回 Foo&
是使运算符在链式操作时表现正常的传统方式。
有人可以解释为什么移动赋值运算符(通常)声明为
Foo& operator=(Foo&&);
为什么 return 是参考而不是例如Foo
还是 Foo&&
?我理解为什么我们想要常规赋值运算符,因为关联性规则 (a=b)=c
在逻辑上被破坏(尽管仍然可编译)如果不是 return 通过引用编辑,但为什么 RHS 时会出现这种情况是右值 (xvalue/prvalue)?
返回 Foo
可能代价高昂,如果类型不可复制则不可能。这也令人惊讶:(a=b)=c
会创建一个临时对象并将 c
分配给它,而您希望这两个分配都是 a
.
返回 Foo&&
很奇怪;你不希望事情神秘地变成 rvalues 这样例如f(a=b)
在您未告知的情况下意外地从 a
移动。
返回 Foo&
是使运算符在链式操作时表现正常的传统方式。