为什么移动分配运算符应该返回对此的引用
Why move assignment operator should return reference to *this
有人能解释为什么移动分配运算符(通常)被声明为吗
Foo& operator=(Foo&&);
为什么不返回引用,例如Foo
或Foo&&
?我理解我们为什么要将其用于正则赋值运算符,因为如果不通过引用返回,(a=b)=c
等关联性规则在逻辑上会被破坏(尽管仍然是可编译的),但为什么RHS是右值(xvalue/prvalue)时会出现这种情况?
如果类型不可复制,则返回Foo
可能代价高昂,而且是不可能的。同样令人惊讶的是:(a=b)=c
会创建一个临时的,并将c
分配给它,而您希望这两个分配都是a
。
返回Foo&&
很奇怪;你不希望事物神秘地变成右值,例如f(a=b)
在你没有告诉它的情况下意外地从a
移动。
返回Foo&
是一种传统的方法,如果您将其链接起来,它会使操作员以一种令人惊讶的方式行事。
相关文章:
- 如何通过引用返回对象
- 函数如何使用引用返回所需的数字?
- 如何防止引用返回的私有结构的突变
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 通过引用返回的变量的范围
- 对于具有引用返回类型的搜索算法,默认返回值应该是什么?
- 运算符重载C++类中的引用返回
- C++对象引用返回不同的值
- 解释通过从函数引用返回数组的语法
- 具有引用返回类型的重写方法上的协变返回类型无效
- 为什么在通过引用返回运算符分配时取消引用'this'指针?
- 为什么我在函数中使用引用并通过引用返回它仍然有效?
- 直接在 C++ 中将值分配给引用返回类型
- C++当您取消引用指向类对象的指针,然后将其作为引用返回时,是否可以对此引用调用方法
- 可以通过常量引用返回默认参数的值吗?
- 按值与右值引用返回
- 非常量引用返回函数在常量值返回函数上用作 r 值
- 当我使用按引用返回时,我不知道这些代码之间的区别
- 为什么通过引用返回向量比通过移动返回要快得多?
- 通过引用返回包含对象的向量