c++ - 读取与在 union 中编写的不同的成员是否是未定义的行为?

标签 c++

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

It's undefined behavior to read from the member of the union that wasn't most recently written.

据此,我上面的示例代码是否有UB? 如果是这样,那么 Union 的意义何在?我认为重点是读/写 不同的值类型形成相同的内存位置。

如果我需要访问最近写入的 值,那么我将只使用 常规变量而不是 union 。

最佳答案

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

当您向 union 的成员写入值时,请将该成员视为事件成员

读取任何非事件成员的 union 成员的行为是未定义的。

在 C++ 中,union 通常与另一个用作识别事件成员的方法的变量相结合。

关于c++ - 读取与在 union 中编写的不同的成员是否是未定义的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67904738/

相关文章:

c++ - 使用 ->read() 读取文本并在控制台中显示

c++ - 使用类似于 strndup 的语义从 char[] 创建 std::string

实现 Go goroutine 或 Go channel 的 C++ 库?

c++ - C 中的打开函数表示无法打开设备 : permission denied

c++ - 为什么这个嵌套的 lambda 不被认为是 constexpr?

java - 如何通过 JNI 将 Java 枚举暴露给 native 代码

c++ - 如何检测USRP USB类型?

c++ - 用 union 初始化 C++ 结构的正确方法是什么?

c++ - 在构造函数参数列表中构造 boost::function 对象时出现错误 C2228

c++ - 什么保证了 slice_array 类的运算符的行为?