auto & vs auto &&:我们应该在 for 循环中使用哪一个



我读过这个链接:使用C++11';s的范围基于?,我已经知道为什么我们使用auto &&来循环vector<bool>。但是我还有一个关于auto &auto &&的问题。

class Test {};
vector<Test> vec = {Test{}, Test{}, Test{}};
vector<Test> vec2;
// case 1
for (auto &element : vec) {
vec2.emplace_back(element);
}
// case 2
for (auto &element : vec) {
vec2.emplace_back(std::move(element));
}
// case 3
for (auto &&element : vec) {
vec2.emplace_back(element);
}
// case 4
for (auto &&element : vec) {
vec2.emplace_back(std::move(element));
}

如您所见,我正试图使用类Test的方法moveconstructor将对象从vec插入到vec2中。

我不知道我应该使用哪种情况,哪种情况更好,哪些情况是错误的。

Ofc,你可能会说我们可以简单地做vec2 = std::move(vec);,这是正确的,但我想知道如何在for循环中移动构造每个元素,而不是移动构造容器。

除非有特定的理由编写自己的循环,否则我不会说以上任何一种。相反,我会使用:

std::move(vec.begin(), vec.end(), std::back_inserter(vec2));

至少从我的阅读来看,这两个方面都很明显:

  1. 你正在努力实现的目标,以及
  2. 你真的在做你想做的事

相关内容

  • 没有找到相关文章

最新更新