移动语义和 return 值
Move semantics and return values
是否需要以下函数末尾的 std::move
(以避免复制向量)?
std::pair<vector<int>, vector<int>> f()
{
vector<int> a, b;
...
return std::make_pair(std::move(a), std::move(b));
}
或者即使 std::move
被省略,编译器也会移动向量吗?
std::move
是必需的。
如果您的建议被允许,以下代码将(令人惊讶地)被破坏,因为 std::make_pair
的两个参数都将是 moved-from:
std::vector<int> a;
// populate a
return std::make_pair(a, a);
是否需要以下函数末尾的 std::move
(以避免复制向量)?
std::pair<vector<int>, vector<int>> f()
{
vector<int> a, b;
...
return std::make_pair(std::move(a), std::move(b));
}
或者即使 std::move
被省略,编译器也会移动向量吗?
std::move
是必需的。
如果您的建议被允许,以下代码将(令人惊讶地)被破坏,因为 std::make_pair
的两个参数都将是 moved-from:
std::vector<int> a;
// populate a
return std::make_pair(a, a);