假设我有两个 vector ,我将一个移到另一个,v1 = std::move(v2)
;在此之后 v2
是否仍处于可用状态?
最佳答案
从 n3290,17.6.5.15 库类型的 move 状态 [lib.types.movedfrom]
- Objects of types defined in the C++ standard library may be moved from (12.8). Move operations may be explicitly specified or implicitly generated. Unless otherwise specified, such moved-from objects shall be placed in a valid but unspecified state.
由于状态是有效的,这意味着您可以安全地对 v2
进行操作(例如,通过分配给它,这会使其回到已知状态)。但是,由于它未指定,这意味着您不能例如依赖 v2.empty()
的任何特定值,只要它处于此状态(但调用它不会使程序崩溃)。
请注意,这一 move 语义公理(“从对象中移出的对象处于有效但未指定的状态”)是所有代码(大多数时候)都应努力实现的目标,而不仅仅是标准库组件。很像复制构造函数的语义应该进行复制,但不强制执行。
关于c++ - move 是否会使对象处于可用状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7930105/