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/