揭開「cout
在最近的一次採訪,一個神秘的編碼難題浮出水面:
int a = 0; cout << a++ << a;
有誘人的選項可供選擇,包括10、01,以及神秘的“未定義行為”,受訪者自信地選擇了01,理由是他們對序列點的理解。然而,面試官的回答卻讓人大吃一驚:正確答案竟然是未定義的。
探索未定義的領域
序列點通常保證在先前完成副作用進入後續評估。有趣的是,所討論的陳述在參數評估之間不具有任何序列點。這意味著參數“a”可以在參數“cout
C 17 中的一線希望
C 17 中的編碼格局已經發生了轉變,其中修改了表達評估規則。最新指南明確規定,在移位運算子表達式中,第一個參數(「E1」)的所有計算和副作用都在第二個參數(「E2」)的計算和副作用之前排序。
這個關鍵調整要求有問題的程式碼片段輸出 01。難以捉摸的未定義行為已被消除,取而代之的是預定結果的確定性。
更深層的深入探討P0145R3 的餘燼
對於那些尋求更全面理解的人,技術論文P0145R3:細化Idiomatic C 的表達式求值順序深入研究了修訂後的表達式求值順序的複雜細節,提供了深刻的見解深入了解C 編碼範式的演變。
以上是是`cout的詳細內容。更多資訊請關注PHP中文網其他相關文章!