移动局部变量时应该使用 std::move 吗? [复制]

Posted

技术标签:

【中文标题】移动局部变量时应该使用 std::move 吗? [复制]【英文标题】:Should I use std::move when moving local variables? [duplicate] 【发布时间】:2014-05-07 20:37:26 【问题描述】:

考虑下面的代码:

Bar my_f()

    Foo fargs,to,create,foo;
    Bar bstd::move(f),other,args; //Is move here unnecessary?

    // code that does not use f;

    return b;

编译器是否需要检查code that does not use f 并自动将f 移动到b

【问题讨论】:

编译器不太可能移动f。只要遵循 as-if 规则,它可能会做一些更高效、更容易实现的事情。某处有重复。 无法保证编译器会这样做......我怀疑编译器会自动这样做,因为它会破坏范围规则。 【参考方案1】:

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

Bar bFooargs, to, create, foo, other, args; // will automatically move (if possible)

【讨论】:

以上是关于移动局部变量时应该使用 std::move 吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

创建对象,局部变量与右值引用

std::move 将 std::string 移动到另一个线程时出错

C ++返回两个大的std :: vector

静态转换为右值引用和 std::move 之间有啥区别吗

这里应该使用右值引用吗?

不可移动的 C++17 唯一指针