首頁 > 後端開發 > C++ > 關於程式語言中的表達式求值,運算子優先權和結合性表實際上告訴我們什麼?

關於程式語言中的表達式求值,運算子優先權和結合性表實際上告訴我們什麼?

DDD
發布: 2024-11-01 12:32:02
原創
787 人瀏覽過

What do operator precedence and associativity tables actually tell us about expression evaluation in programming languages?

運算子優先權與結合性:定義及與計算順序的關係

簡介

簡介

程式設計中語言、運算子優先順序和結合性決定了運算子的求值順序。雖然許多程式設計教科書提供了列出這些屬性的表格,但關於它們的解釋及其定義的來源卻出現了問題。

  1. 問題
如果函數的概念是總是從左到右評估是不正確的,運算符優先級和結合性表真正表示什麼?

如果不是 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板