移动语义并返回值

时间:2017-02-02 07:38:59

标签: c++11 return-value move

是否需要以下函数末尾的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,编译器也会移动向量吗?

1 个答案:

答案 0 :(得分:4)

std::move是必要的。

如果您的建议被允许,以下代码将会(令人惊讶地)被打破,因为std::make_pair的两个参数都将被移除:

std::vector<int> a;
// populate a
return std::make_pair(a, a);