為什麼這個循環會產生「警告:迭代 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中文網其他相關文章!