未定義的行為:理解 cout
在 C 中,必須理解未定義行為的概念。未定義行為是指程式的行為未由 C 標準指定,從而導致不可預測的結果的情況。
考慮以下語句:
cout << a++ << a;
這裡,我們有一個序列涉及增量運算子 ( ) 和插入運算子 (
序列點是程式碼中編譯器保證所有副作用都已發生的特定點。然而,在上面的語句中,a 和 a 的計算之間沒有順序點。這意味著標準未指定這些操作的執行順序。
因此,此語句的輸出可能會因實作而異。在某些情況下,輸出可能是“01”,而在其他情況下,輸出可能是“10”。但是,該標準不保證會發生哪種情況,從而導致行為未定義。
C 17 Update
需要注意的是,管理 C 中表達式求值的規則已在 C 17 中更新。在C 17 中,以下規則適用於移位運算子表達式,例如>:
「在移位運算子表達式E1>E2 中,E1 的每個值計算和副作用都在E2 的每個值計算和副作用之前排序."
此規則消除了原始語句中未定義的行為。在 C 17 中,語句 cout
以上是為什麼是`cout的詳細內容。更多資訊請關注PHP中文網其他相關文章!