移动局部变量时我应该使用std :: move吗?

时间:2014-05-07 20:37:26

标签: c++ c++11

考虑以下代码:

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

1 个答案:

答案 0 :(得分:5)

编译器不会自动将对象移动到Bar的构造函数中,只是因为之后没有使用f。如果您想移动f,请使用std::move(f)将其显式删除或删除命名变量:

Bar b{Foo{args, to, create, foo}, other, args}; // will automatically move (if possible)