如何解决auto & vs auto &&:我们应该在for循环中使用哪一个
我已阅读此链接:What is the correct way of using C++11's range-based for?,我知道为什么我们使用 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));
}
如您所见,我正在尝试使用类 vec
的方法 移动构造函数 将 vec2
中的对象插入到 Test
中。
我不知道我应该使用哪种情况,哪种情况更好,哪些情况是错误的。
Ofc,您可能会说我们可以简单地执行 vec2 = std::move(vec);
,这是正确的,但我想知道如何在 for 循环中移动构造每个元素,而不是移动构造容器。
解决方法
除非有特定的理由来编写自己的循环,否则我不会说以上任何一个。相反,我会使用:
std::move(vec.begin(),vec.end(),std::back_inserter(vec2));
至少通过我的阅读,这使得两者都相当明显:
- 您正在努力实现的目标,以及
- 你真的在做你想做的事。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。