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
但是,標準並沒有定義這些副作用發生的順序。這意味著編譯器可以以任何順序執行它們,可能會在每次執行程式時產生不同的輸出。在這種特定情況下,輸出為“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中文網其他相關文章!