假设我们有一个非POD和POD部分的类。移动构造函数和移动分配是默认的。移动后是否可以安全使用此类实例的POD部分?
#include <string>
struct A {
std::string s = "foo";
int i = 42;
};
A a;
A b = std::move(a);
int j = a.i; //OK or UB?
是否保证元素移动/复制(所以这样就可以了)或者符合实现可以改变POD部分(例如,通过交换默认构造的对象)?
答案 0 :(得分:1)
默认移动ctor只是对每个成员(和基础)进行移动。
移动基本类型只是复制它。
所以这个级别很明确。
然而,从语义上讲,这是一个错误:你应该设法避免依赖移动对象状态的细节,除非它有效&#39;。