【发布时间】:2012-04-15 09:04:35
【问题描述】:
根据我对此发表的评论:
passing std::vector to constructor and move semantics
以下代码中是否需要std::move,以确保返回值是xvalue?
std::vector<string> buildVector()
{
std::vector<string> local;
// .... build a vector
return std::move(local);
}
据我了解,这是必需的。我经常看到在从函数返回 std::unique_ptr 时使用它,但是 GManNickG 发表了以下评论:
据我了解,在 return 语句中,所有局部变量都会自动成为 xvalues(过期值)并将被移动,但我不确定这是否仅适用于返回的对象本身。所以OP应该继续把它放在那里,直到我更有信心它不应该是。 :)
谁能澄清std::move 是否有必要?
行为编译器是否依赖?
【问题讨论】:
-
请注意,自从您修改我的声明以来,您已导致我修改。它只是被移动的返回值(可能是局部变量),而不是一般的所有局部变量。 (虽然这很好,但它可能会破坏一些我想不到的旧代码,并且 C++ 进程必须保持向后兼容性。)
标签: c++ c++11 move-semantics