读取与在联合中写入的成员不同的成员是否是未定义的行为?

union test{
  char a; // 1 byte
  int b;  // 4 bytes
};

int main(){ 
  test t;
  t.a = 5;
  return t.b;
}

这个链接说:https : //en.cppreference.com/w/cpp/language/union

从最近未写入的联合成员中读取是未定义的行为。

据此,我上面的示例代码有UB吗?如果是这样,那么联盟的意义何在?我认为重点在于从相同的内存位置读取/写入不同的值类型。

如果我需要访问该most recently written值,那么我将只使用常规变量而不是联合。

回答

是的,行为在 C++ 中是未定义的。

当您向 union 的成员写入值时,请考虑该成员成为active member

读取任何非活动成员的联合成员的行为是未定义的。

在 C++ 中,aunion通常与另一个变量结合使用,作为识别活动成员的手段。


以上是读取与在联合中写入的成员不同的成员是否是未定义的行为?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>