🌵

Type punning と strict Aliasing Rule

に公開
2

Discussion

yohhoyyohhoy

利用可能(C++20以降)ならば、コンパイル時に型サイズ互換性検査を行うstd::bit_castが望ましいですね。std::memcpyはC++20未満環境での選択肢と考えるのがベターと思います。

Strict Aliasing Rule違反は、GCCであれば-Wstrict-aliasing(または -Wall) オプションによるコンパイル時検査、Clangであれば-fsanitize=typeオプションによる実行時検査でも検出可能です。(VisualC++はStrict Aliasing Ruleによる積極的な最適化を行わないため本件と無縁)

Demo: https://godbolt.org/z/vMPP7qzdf

h1de_n_nh1de_n_n

情報提供ありがとうございます。

コンパイル時検査や実行時検査のサポートがあるんですね。絶対つけろと言われる-Wallにそんなオプションが埋まっていたとは知りませんでした。。

コメントを受けて、本文を改良しました。ご指摘ありがとうございました。