分配给成员的工会

Col*_*len 1 c++ unions

假设我有一个有工会成员的班级:

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)

?谢谢.

CB *_*ley 5

对于大多数实际目的,在大多数实现中,这两个语句会产生相同的效果,但不能保证.如果从联合中读取的成员不是写入联合的最后一个成员,则程序的行为是未定义的.

因为联合的两个成员都是指向结构的指针,所以它们很可能占用相同的大小并具有类似的表示,因此如果指定了联盟成员,则可能正确地分配另一个联合成员,如果这是实际存储在源联合中的那个.