2009-08-01 94 views
1

如您所知,C/C++沒有指定表達式評估順序。什麼原因讓他們不明確。爲什麼C/C++沒有定義表達式評估順序?

+0

我期待着一些很好的答案。就像,對於從左到右(或其他)評估順序,編譯器可以從某些語句(例如函數調用或其他語句)生成優化的(A)彙編代碼(x86)塊,並且對於未定義的評估順序,編譯器可以生成優化的B)彙編代碼(x86)塊。在(A)和(B)之間進行一些比較也是很好的(比如爲什麼(B)更快)。 此外,這個決定有多好?許多優化技術通常不會實現(包括特定於平臺的技術) – 2009-08-01 19:31:36

回答

4

它允許編譯器優化。 一個例子是算術指令對ALU的最大使用率進行重新排序,或者通過計算隱藏內存延遲。

1

C/C++設計目標之一是編譯器的高效實現。因此,編譯器可以相對自由地選擇複雜表達式中各種子表達式的評估順序;我們認爲這個順序不受運算符優先級和關聯性的限制。在這種情況下,當我們在多個子表達式中修改相同的可變參數時,行爲變得不被滿足。在放棄之前的值之後並且在表達式的任何其他部分被疏散之前,不保證遞增或遞減操作立即執行。唯一的保證是更新將在表達式考慮完成之前執行。

未定義的行爲意味着未定義,任何事情都可能發生

來源:C程序設計師Steve Summit的常見問題