(我刚刚意识到我首先需要通过复制联合来解决一个更基本的问题:When a union object is copied,is a member subobject created?。请先看看其他问题。)
类的隐式生成的复制操作(构造函数和赋值)执行成员复制(初始化或赋值)。 (对于普通类型,它们是相同的。)
由于无法访问未初始化的对象,因此无法复制某些成员未初始化的类。
struct C {
int m1,m2;
};
void f() {
C c1,c2;
c1.m1 = 1;
c2 = c1; // not initialized
}
但是,即使工会包含类成员,但其中的某些成员未初始化(因为……根据定义,不是工会的两个成员都被初始化),也可以始终复制该工会。
这是否意味着复制具有未初始化成员的类的并集是合法的:
union U {
C m;
};
void g() {
U u1,u2;
u1.m.m1 = 1;
u2 = u1;
}
,如果是这样,是否可以通过强制转换为此类联合来复制类?
void f2() {
C c1,c2;
c1.m1 = 1;
(U&)c2 = (U&)c1; // not initialized?
}