假设我有一个有工会成员的班级:
class ClassX {
public:
union {
StructA * A;
StructB * B;
};
}
Run Code Online (Sandbox Code Playgroud)
如果我将指针x1和x2指向不同的ClassX对象,请执行以下操作:
x1->A = x2->A;
Run Code Online (Sandbox Code Playgroud)
与此具有相同的效果:
x1->B = x2->B;
Run Code Online (Sandbox Code Playgroud)
?谢谢.
对于大多数实际目的,在大多数实现中,这两个语句会产生相同的效果,但不能保证.如果从联合中读取的成员不是写入联合的最后一个成员,则程序的行为是未定义的.
因为联合的两个成员都是指向结构的指针,所以它们很可能占用相同的大小并具有类似的表示,因此如果指定了联盟成员,则可能正确地分配另一个联合成员,如果这是实际存储在源联合中的那个.