假设我有struct Foo
moveconstructor
和operator=(Foo&&)
,并将其用作数据成员:
Foo f()
{
Foo foo;
//code
return foo;
}
struct Boo {
Foo foo;
Boo() {
foo = f();//1
foo = std::move(f());//2
}
};
万一(2)我实际上不需要std::move
,但是如果我在这里使用它会怎样,这是否会造成不好的影响,例如阻止优化?
并发现更改return foo;
会return std::move(foo);
导致禁用RVO
,但是(2)会导致类似情况吗?如果是这样,为什么?