條件式中的型別推論
條件運算子(?:) 是C 中的一個強大工具,可以實現簡潔且富有表現力的程式碼。但是,了解此運算符的結果類型對於正確使用至關重要。
考慮以下程式碼範例:
int x = 1; int y = 2; (x > y ? x : y) = 100;
在這種情況下,第一個條件運算子的計算結果為右邊值int 類型,因為兩個運算元都是int 類型。因此,賦值是有效的。
但是,在以下範例中:
int x = 1; long y = 2; (x > y ? x : y) = 100;
條件運算子無法計算為左值,因為第二個和第三個運算元的類型不同。因此,對此表達式的賦值無效:
error: lvalue required as left operand of assignment | (x > y ? x : y) = 100; | ~~~~~~~^~~~~~~~
要理解此行為,我們需要深入研究 C 中值類別的概念。
條件式繼承其型別並來自其運算元的值類別。如果兩個運算元都是左值,則條件式也是左值。如果其中一個運算元是右邊值,則條件運算式也是右邊值。
在第一個範例中,x 和 y 都是相同型別的左值,因此條件式的計算結果為 int 型別的左值。在第二個範例中,x 是左值,但 y 是右值,因此條件表達式無法計算為左值。
請務必記住,條件運算子的值類別是在編譯時決定的。即使條件計算結果為 false,條件表達式的類型和值類別也必須保持一致。這符合賦值運算子的左側必須是左值的規則。
以上是C 類型推論如何影響條件表達式的左值/右值行為?的詳細內容。更多資訊請關注PHP中文網其他相關文章!