C++のfloatからintへの変換は未定義動作になる

C++ float-to-int conversion can be undefined behavior

C++でfloatをintに変換する際、切り詰めた値がintの範囲に収まらないと未定義動作(UB)になります。この問題は、MicrosoftのGSLライブラリのgsl::narrow関数にも存在し、ドキュメントでは例外を投げるとされていますが、実際にはUBが発生します。コンパイラやハードウェアによって結果が異なるため、バグの原因になります。正しい修正方法は、キャスト前に範囲チェックを行うことです。

「ハードウェアが行うこと」は「プログラムが行うこと」と同じではありません。

同じ日のその他の記事

2026-08-03