特定
std::list<std::vector<float>> foo;
std::vector<float> bar;
我应该怎么搬家 bar 到了最后 foo 没有复制数据?
这个可以吗?
foo.emplace_back(std::move(bar));
特定
std::list<std::vector<float>> foo;
std::vector<float> bar;
我应该怎么搬家 bar 到了最后 foo 没有复制数据?
这个可以吗?
foo.emplace_back(std::move(bar));
这个可以吗?
foo.emplace_back(std::move(bar));
是的,因为:
std::move(bar) 铸件 bar 到了 右值参考。
std::list::emplace_back 需要任意数量的 转发参考 并使用它们在最后构造一个元素。
std::vector::vector 有一个超载 (6) 需要一个 右值参考,它移动了内容 RHS 矢量没有执行任何副本。
是的,Q中的代码当然可以。即使使用 push_back 没关系:
foo.push_back(std::move(bar));
这个可以吗?
foo.emplace_back(std::move(bar));
是的,因为:
std::move(bar) 铸件 bar 到了 右值参考。
std::list::emplace_back 需要任意数量的 转发参考 并使用它们在最后构造一个元素。
std::vector::vector 有一个超载 (6) 需要一个 右值参考,它移动了内容 RHS 矢量没有执行任何副本。
是的,Q中的代码当然可以。即使使用 push_back 没关系:
foo.push_back(std::move(bar));
我应该怎么搬家
bar到了最后foo没有复制数据?
使用移动构造函数 std::vector:
foo.push_back(std::move(bar));
这个可以吗?
foo.emplace_back(std::move(bar));
那也没关系。