aliasingに関する未定義動作を引き起こすから注意するようにというツイートを見た。以下のコードは字面から想定される挙動を示さない。ruleを理解すると納得できる。yohhoyの日記が異常に分かりやすいので読むだけである。結局特定の型の組み合わせでしか、異なる型の値にアクセスすることは規格上許容されておらず、double*にint*が渡されることは想定されない。1に最適化してしまう(可能性があるし、実際そうなった)ということらしい。Cスタイルのキャストを使えばコンパイラ時にエラーを見なくてすむが、結果は変わらないのでもっと危険である。reinterpret_castでも未定義動作には変わりない。aliasingによる最適化を抑制して直感に反しないアセンブラを吐くことが出来るが、その場しのぎで行儀の悪いコードを放置する付け焼き刃である。unionですらcでは規格内だがc++で規格外(未使用の変数にアクセスできない)なのでmemcpyを使うべきという結論らしい。shafik/WhatIsStrictAliasingAndWhyDoWeCare.mdも色々記載があって面白そうだが、難しいためまた必要になった際に読むことにする。Lippmanの著書。C++コンパイ...2018-06-17低体温療法のデータいじり(その2)低体温療法続き。メモはてなブログをはじめよう!kuyataさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。