タグ

ブックマーク / gununu.hatenadiary.jp (1)

  • strict aliasing rules, type punning解説 その1 - gununuの日記

    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

    strict aliasing rules, type punning解説 その1 - gununuの日記
    rydot
    rydot 2019/06/20
  • 1