boo*_*faz 6 c++ containers stl move-semantics
是否有一个 STL 容器(没有 Boost)可以从中删除元素并将其移动到左值?
假设我有一个std::vector
大对象和一个变量,我想从向量中弹出一个元素。
var = vec.back(); // non-move assign op
vec.pop_back(); // dtor
var = containerWithMovePop.pop_and_return(); // move assign-op
Run Code Online (Sandbox Code Playgroud)
性能并不那么重要,我只是想知道它是否可能。
正如@aeschpler 所说,这有效
auto var = std::move(vec.back());
vec.pop_back();
Run Code Online (Sandbox Code Playgroud)
vec.back() 将为空(如果是字符串)或相同(如果是 int),或者 back 和 pop_back 之间的任何内容(取决于类型),但这很好。当析构函数在 pop_back() 中运行时,那里几乎没有什么可做的。
既然我们已经有了移动语义,我们将来可能会让 pop_back() 返回 T (正如 ppl 所指出的,当指定 std::vector<> 时我们没有这样做),但它很可能是一个新方法,所以不要破坏向后兼容性。
归档时间: |
|
查看次数: |
1331 次 |
最近记录: |