Chr*_*ger 11 c++ move-semantics c++11
特定
std::list<std::vector<float>> foo;
std::vector<float> bar;
Run Code Online (Sandbox Code Playgroud)
如何bar在foo不复制数据的情况下移动到最后?
这个可以吗?
foo.emplace_back(std::move(bar));
Run Code Online (Sandbox Code Playgroud)
这个可以吗?
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));
Run Code Online (Sandbox Code Playgroud)
我应该如何移动
bar到末尾foo而不复制数据?
使用 的移动构造函数std::vector:
foo.push_back(std::move(bar));
Run Code Online (Sandbox Code Playgroud)
这个可以吗?
Run Code Online (Sandbox Code Playgroud)foo.emplace_back(std::move(bar));
那也可以。