ユニオンに関するCおよびC++標準を理解している限り、実際に書き込まれたフィールドとは異なるユニオンの特定のフィールドにアクセスしようとすると、技術的に未定義の動作になります。最近、誰かが書いた次のような古いコードを見直しています。
union myunion {
float myfloat;
unsigned int myuint;
};
myunion a;
a.myfloat = 1.01;
myunion b = a;
一言で言えば、このように共用体で代入演算子を使用することが実際に明確に定義された動作であるかどうかを調べようとしています。このようなコードを自分で作成するときは、ユニオン インスタンスによってアクティブに使用されるフィールドの型を格納し、この値のみを読み書きするようにします。デバッガーでコードをステップ実行すると、これが起こっていることが示されるため、上記の代入演算子を使用すると、おそらくビット単位のコピーになるだけだと思います (この例ではフィールドのサイズが等しいため)。このコードには微妙なバグが見られるので、この方法で共用体を別の共用体に直接割り当てることによって、UB の意味で本質的に危険なものがあるかどうかを知りたいと思っています。