strict aliasing rules つまり元の型のオブジェクトを別の型のオブジェクトとして使用すること(type punning)は基本的にできないというC/C++におけるルール。 つまり以下のようなことはできず、未定義動作を引き起こします。 float value = 0; int i = *(int*)&value; //undefined behavior これはfloatとintに互換性(aliasingの仮定)がないからです。ここではアライメントや型の大きさの違いといった環境依存の別の問題も存在しますが、これをクリアしても依然として未定義動作です。 static_assert(sizeof(float) == sizeof(int), ""); alignas(float) alignas(int) float value = 0; int i = *(int*)&val