このループで「警告: 反復 3u は未定義の動作を呼び出します」が生成され、4 行を超える出力がされるのはなぜですか?
問題のコード:
#include <iostream> int main() { for (int i = 0; i < 4; ++i) std::cout << i * 1000000000 << std::endl; }
は以下を生成します警告:
warning: iteration 3u invokes undefined behavior [-Waggressive-loop-optimizations] std::cout << i * 1000000000 << std::endl; ^
この警告は、次のステートメントで発生する符号付き整数オーバーフローから発生します:
i * 1000000000
i (int データ型) と 1000000000 の乗算は整数になります1000000000 は大きすぎて int 変数の範囲に収まらないため、オーバーフローが発生します。その結果、i の値は未定義になり、i に対する後続の操作 (コンソールへの出力など) によって予期しない結果が生じる可能性があります。
この特定のケースでは、ループが反復を続け、意図したものを超える出力が生成されます。ループ条件 i
この問題を解決するには、次のいずれかを考慮してループの終了条件を調整する必要があります。オーバーフローを解決するか、乗算の結果を処理できる十分な幅の整数データ型を使用してください。
以上がこのループがオーバーフローして予期しない出力が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。