特定
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));
那也没关系。