簡體   English   中英

為什么 C/C++ 沒有定義表達式求值順序?

[英]Why C/C++ does not defined expression evaluation order?

您可能知道 C/C++ 沒有指定表達式求值順序。 使它們未定義的原因是什么。

它允許編譯器優化。 一個例子是重新排序算術指令以最大限度地使用 ALU 或隱藏計算的內存延遲。

C/C++ 設計目標之一是編譯器的高效實現。 因此,編譯器可以相對自由地選擇復雜表達式中各個子表達式的求值順序; 這個順序不受我們認為的運算符優先級和結合性的限制。 在這種情況下,當我們在多個子表達式中修改同一個變量時,行為變得不受約束。 不能保證在放棄前一個值之后和計算表達式的任何其他部分之前立即執行遞增或遞減操作。 唯一的保證是更新將在表達式被認為完成之前執行。

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

來源:Steve Summit 的 C 編程常見問題解答

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM