cout 的未定義輸出
在程式碼片段中:
int a = 0; cout << a++ << a;
通常假設該行為相當於:
cout << (a++) << a;
但是,由於缺乏函數參數求值之間的序列點,不保證執行順序。編譯器可能會評估 std::operator<<<>(std::cout, a ) 之前或之後的值。
因此,正確的解釋是:
cout << ((a++) << a);
這表示結果是undefined,因為在第二次呼叫中使用了增量後的a 值運算符<<<>。
C 17 修正案
在C 17 中,規則已修改為:
E1 << E2
評估為:
std::operator<<<>(std::operator<<<>(E1, E2), E3)評估為:評估為:評估為:評估為: 具有E1的所有副作用在E2之前定序。這確保了程式碼片段現在產生預期的輸出“01”。
以上是為什麼 `cout 的輸出是的詳細內容。更多資訊請關注PHP中文網其他相關文章!