是否需要以下函数末尾的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
,编译器也会移动向量吗?
答案 0 :(得分:4)
std::move
是必要的。
如果您的建议被允许,以下代码将会(令人惊讶地)被打破,因为std::make_pair
的两个参数都将被移除:
std::vector<int> a;
// populate a
return std::make_pair(a, a);