運算子優先權與結合性:定義及與計算順序的關係
簡介
簡介程式設計中語言、運算子優先順序和結合性決定了運算子的求值順序。雖然許多程式設計教科書提供了列出這些屬性的表格,但關於它們的解釋及其定義的來源卻出現了問題。
如果不是 ANSI 標準,誰建立運算子優先順序和結合性?如果 ANSI 確實定義了它,為什麼標準中很少明確提及?此資訊是從 ANSI C 標準推斷出來的還是在其他地方建立的?
答案
運算子優先順序與關聯性定義additive-expression: multiplicative-expression additive-expression + multiplicative-expression additive-expression - multiplicative-expression運算子優先順序和關聯性定義
運算子是優先順序和結合性算符在語言標準本身中定義的。標準語法指定了構造表達式的規則。透過檢查這些規則,可以推導出運算子的優先順序和結合性。 例如,在C 中,加法表達式(加法和減法)的語法如下:
從這條規則,我們可以推斷乘法表達式(乘法和除法)比加法表達式具有更高的優先級,因為它們是加法表達式的子規則。此外,可以從規則中推斷出 and - 運算子的從左到右的關聯性,該規則規定一個加法表達式可以遞歸地由其他加法表達式組成。求值順序
區分運算子優先順序和結合性以及求值順序至關重要。雖然優先權和結合性決定了運算子的分組方式,但計算順序是指計算各個表達式的順序。在 C 中,不能保證嚴格依照優先順序和結合性進行求值。 例如,在表達式f1() f2() * f3() 中, * 運算子的優先權高於運算符,因此在分組f1() (f2() * f3()) 中。但是,計算順序未定義,這意味著可以先計算 f3()、f1() 或 f2()。 某些運算符,例如邏輯 OR (||) 運算符,可以執行對它們的操作數求值施加一個序列,允許短路。在x||中y, x 總是在 y 之前評估,以確定是否需要評估 y。以上是關於程式語言中的表達式求值,運算子優先權和結合性表實際上告訴我們什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!