相关疑难解决方法(0)

C++ 11 rvalues和移动语义混淆(return语句)

我试图理解rvalue引用并移动C++ 11的语义.

这些示例之间有什么区别,哪些不会执行矢量复制?

第一个例子

std::vector<int> return_vector(void)
{
    std::vector<int> tmp {1,2,3,4,5};
    return tmp;
}

std::vector<int> &&rval_ref = return_vector();
Run Code Online (Sandbox Code Playgroud)

第二个例子

std::vector<int>&& return_vector(void)
{
    std::vector<int> tmp {1,2,3,4,5};
    return std::move(tmp);
}

std::vector<int> &&rval_ref = return_vector();
Run Code Online (Sandbox Code Playgroud)

第三个例子

std::vector<int> return_vector(void)
{
    std::vector<int> tmp {1,2,3,4,5};
    return std::move(tmp);
}

std::vector<int> &&rval_ref = return_vector();
Run Code Online (Sandbox Code Playgroud)

c++ c++-faq rvalue-reference move-semantics c++11

415
推荐指数
3
解决办法
10万
查看次数

何时应该在函数返回值上使用std :: move?

在这种情况下

struct Foo {};
Foo meh() {
  return std::move(Foo());
}
Run Code Online (Sandbox Code Playgroud)

我很确定移动是不必要的,因为新创建的Foo将是一个xvalue.

但在这种情况下呢?

struct Foo {};
Foo meh() {
  Foo foo;
  //do something, but knowing that foo can safely be disposed of
  //but does the compiler necessarily know it?
  //we may have references/pointers to foo. how could the compiler know?
  return std::move(foo); //so here the move is needed, right?
}
Run Code Online (Sandbox Code Playgroud)

我认为需要采取行动吗?

c++ move-semantics c++11

109
推荐指数
4
解决办法
5万
查看次数

标签 统计

c++ ×2

c++11 ×2

move-semantics ×2

c++-faq ×1

rvalue-reference ×1