考虑以下代码:
Bar my_f()
{
Foo f{args,to,create,foo};
Bar b{std::move(f),other,args}; //Is move here unnecessary?
// code that does not use f;
return b;
}
是否需要编译器检查{code that does not use f}
并自动将f
移至b
?
答案 0 :(得分:5)
编译器不会自动将对象移动到Bar
的构造函数中,只是因为之后没有使用f
。如果您想移动f
,请使用std::move(f)
将其显式删除或删除命名变量:
Bar b{Foo{args, to, create, foo}, other, args}; // will automatically move (if possible)