首頁  >  文章  >  後端開發  >  為什麼在 cout 中使用後自增運算子的 C 程式的輸出未定義?

為什麼在 cout 中使用後自增運算子的 C 程式的輸出未定義?

Barbara Streisand
Barbara Streisand原創
2024-11-06 08:23:02242瀏覽

Why is the output of a C   program with post-increment operators used in cout undefined?

C 中後置增量的未定義行為

在C 中,後置增量運算子(i ) 將變數的值增加1 評估後。當與 cout 中的插入運算子 (

程式 1

考慮以下程式碼片段:

<code class="cpp">#include <iostream>
using namespace std;

main(){
    int i = 5;
    cout << i++ << i-- << ++i << --i << i << endl;
}</code>

程式的輸出未定義。根據 C 標準,當標量物件(例如 i)的副作用相對於使用相同物件的另一個副作用或值計算而言是無序的時,該行為是未定義的。

解釋:

表達式cout

  1. i :將i 遞增到6 並回傳5。
  2. i--:將 i 遞減到 5。
  3. i:將 i 遞增到 6。
  4. --i:將 i 遞減到 5。
  5. i:回傳 5。

但是,標準並沒有定義這些副作用發生的順序。這意味著編譯器可以以任何順序執行它們,可能會在每次執行程式時產生不同的輸出。在這種特定情況下,輸出為“55555”,因為副作用是按照上面列出的順序執行的。

程式 2

以下程式也示範了未定義的行為:

<code class="cpp">int x = 20, y = 35;
x = y++ + y + x++ + y++;
cout << x << endl << y;</code>

程式的預期輸出是 126 和 37。但是,由於未定義的行為,實際輸出可能會因編譯器實作而異。

道德故事:

必須避免將後增量與 cout 或任何其他依賴漸進副作用的操作結合使用。相反,使用單獨的行來修改和列印變數以確保可預測的行為。

以上是為什麼在 cout 中使用後自增運算子的 C 程式的輸出未定義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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