假设我有struct Foomoveconstructor和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)会导致类似情况吗?如果是这样,为什么?