程式設計中的優先順序和關聯性
在程式設計中,運算順序對於正確計算表達式至關重要。運算符優先級和結合性在確定此順序中起著至關重要的作用。
誰定義了運算子優先權和結合性?
特定程式語言的標準定義了運算子優先順序和結合性。對於 C 和 C ,這些定義可以在各自的語言語法中找到。
運算子優先順序是如何定義的?
運算子優先順序根據運算子建立運算子分組優先事項。優先順序較高的運算子先於優先順序較低的運算子進行計算。此層次結構是在語言語法中定義的。
關聯性是如何定義的?
關聯性決定同一運算子的相鄰使用如何分組。例如,如果運算子是從左到右關聯的,則該運算子的相鄰使用將從左到右關聯。此規則也源自於語言語法。
與求值順序的關係
運算子優先權和結合性並不會直接控制函數呼叫的求值順序。標準只要求運算子的操作數在運算子本身之前進行計算。
從左到右的函數結合性
函數總是從左開始計算的信念向右並不完全準確。雖然某些運算子(例如函數呼叫運算子)確實具有從左到右的關聯性,但這並不決定函數呼叫的計算順序。
關聯性的影響
考慮例 f1() f2() * f3()。 * 運算子的優先權高於運算符,因此表達式分組為 f1() (f2() * f3())。但是,求值函數呼叫的順序並不是由關聯性指定的。
其他順序注意事項
特定運算子可以對運算元求值施加排序限制。例如,在 x || 中y、x 總是在 y 之前計算。這允許短路行為。
歷史脈絡
先前在 C 和 C 中使用序列點來定義評估順序。然而,現代標準採用了「先前排序」關係的概念來描述這種行為。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3