首頁 >後端開發 >C++ >為什麼此循環會溢出並產生意外的輸出?

為什麼此循環會溢出並產生意外的輸出?

DDD
DDD原創
2024-12-02 18:11:19258瀏覽

Why Does This Loop Overflow and Produce Unexpected Output?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn