理解三元運算子(?:) 的結果類型
C 中的三元運算子(?:) 允許基於條件賦值在指定條件下。但是,了解其結果類型以避免潛在的陷阱至關重要。
在提供的第一個範例中:
int x = 1; int y = 2; (x > y ? x : y) = 100;
條件式 (x > y ? x : y) 傳回一個int 型,與賦值運算式的左邊相同。因此,賦值有效,且 x 被賦值為 100。
在第二個範例:
int x = 1; long y = 2; (x > y ? x : y) = 100;
表達式 (x > y ? x : y) 嘗試傳回int 型,但 y 變數為 long 型別。為了匹配 long 類型,需要轉換 x,從而產生臨時值而不是左值。由於賦值表達式的左側需要左值,這會導致編譯錯誤。
理解表達式的值類別在 C 中至關重要。條件表達式可以是左值(引用記憶體中的物件)或右值(只是一個值)。對於要成為左值的條件式,其第二個和第三個運算元必須都是同一型別的左值。這是因為條件表達式的類型和值類別是在編譯時決定的,並且必須與條件的結果一致。如果一個或兩個操作數需要轉換以符合類型,則條件表達式不能是左值,因為轉換的結果不合格。
遵守這些規則,開發人員可以避免潛在的錯誤並確保三元無論是用於條件賦值還是其他場景,運算子表達式的行為都符合預期。
以上是什麼決定了 C 三元運算子 (?:) 的結果類型和值類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!