vso*_*tco 3 c++ move-semantics c++11
有人可以解释为什么移动分配运算符(通常)声明为
Foo& operator=(Foo&&);
Run Code Online (Sandbox Code Playgroud)
为什么返回引用而不返回eg Foo
或Foo&&
?我理解为什么我们要对常规赋值运算符使用此方法,因为(a=b)=c
如果没有通过引用返回,则关联规则在逻辑上被破坏(尽管仍然可以编译),但是为什么RHS是右值(xvalue / prvalue)时会出现这种情况?
返回Foo
可能很昂贵,如果类型不可复制,则返回是不可能的。同样令人惊讶的是:当您期望两个分配都为时,(a=b)=c
会创建一个临时分配c
给它a
。
回来Foo&&
真是奇怪。您不希望事物神秘地变成右值,以便例如在您不告诉的情况下f(a=b)
意外地从右移a
。
Foo&
如果将其链接起来,返回是使操作员表现出令人惊讶的常规方式。
归档时间: |
|
查看次数: |
342 次 |
最近记录: |