【发布时间】:2014-04-16 19:24:02
【问题描述】:
我有一个std::vector<std::string> 可以在循环中重复使用。 std::move 元素出来可以吗?如果我将第 i 个元素移出,那么第 i 个 slot 会进入未定义但有效的状态,但是向量呢?它的状态是否仍然定义和有效?另外,我可以clear(),然后在下一次迭代中重用向量吗?
编辑:请在标记重复之前阅读问题。我在做std::move(v2[0]) 之后询问v2 的状态,而不是std::move(v2)。在我做了v2.clear() 之后,我也重用了v2。这与建议的重复有何相似之处?
编辑:代码示例:
struct Foo {
string data;
/* other data memebers */
void workOnData();
}
std::vector<std::string> buffer;
Foo foo;
while (1) {
buffer.clear();
loadData(buffer); // push data to buffer, at least one element in buffer guaranteed
foo.data.assign(std::move(buffer[0])); // please don't ask is Foo necessary or why workOnData has to be a member method. THIS IS A SIMPLIFIED EXAMPLE!
foo.workOnData();
}
【问题讨论】:
-
@ChrisJester-Young 我认为他们的意思是
std::move。在这种情况下,迭代器仍然有效。 -
状态未指定,而非未定义。查看副本...
-
@galop1n 不,不是。我不是在谈论移动对象后的状态。但是容器在移动其元素后的状态
-
@YZ.learner:为什么你认为搞砸一个对象会以任何方式改变容器的状态?
-
@galop1n:“扩展完全一样。” -- 不,绝对不一样。