🌵Type punning と strict Aliasing Rule2025/08/31に公開2025/09/092件テーマ「フリーテーマ」C++zennfes2025freetechDiscussionyohhoy3ヶ月前利用可能(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_n3ヶ月前情報提供ありがとうございます。 コンパイル時検査や実行時検査のサポートがあるんですね。絶対つけろと言われる-Wallにそんなオプションが埋まっていたとは知りませんでした。。 コメントを受けて、本文を改良しました。ご指摘ありがとうございました。 返信を追加
yohhoy3ヶ月前利用可能(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_n3ヶ月前情報提供ありがとうございます。 コンパイル時検査や実行時検査のサポートがあるんですね。絶対つけろと言われる-Wallにそんなオプションが埋まっていたとは知りませんでした。。 コメントを受けて、本文を改良しました。ご指摘ありがとうございました。 返信を追加
h1de_n_n3ヶ月前情報提供ありがとうございます。 コンパイル時検査や実行時検査のサポートがあるんですね。絶対つけろと言われる-Wallにそんなオプションが埋まっていたとは知りませんでした。。 コメントを受けて、本文を改良しました。ご指摘ありがとうございました。
Discussion
利用可能(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
情報提供ありがとうございます。
コンパイル時検査や実行時検査のサポートがあるんですね。絶対つけろと言われる
-Wallにそんなオプションが埋まっていたとは知りませんでした。。コメントを受けて、本文を改良しました。ご指摘ありがとうございました。