条件式での型推論
条件演算子 (?:) は 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;
2 番目と 3 番目のオペランドの型が異なるため、条件演算子を左辺値に評価できません。したがって、この式への代入は無効です:
error: lvalue required as left operand of assignment | (x > y ? x : y) = 100; | ~~~~~~~^~~~~~~~
この動作を理解するには、C の値カテゴリの概念を詳しく調べる必要があります。
条件式はその型を継承し、値カテゴリをオペランドから抽出します。両方のオペランドが左辺値の場合、条件式も左辺値になります。オペランドの 1 つが右辺値の場合、条件式は右辺値です。
最初の例では、x と y は両方とも同じ型の左辺値であるため、条件式は int 型の左辺値として評価されます。 2 番目の例では、x は左辺値ですが、y は右辺値であるため、条件式を左辺値に評価することはできません。
条件演算子の値カテゴリはコンパイル時に決定されることに留意することが重要です。条件が false と評価された場合でも、条件式の型と値のカテゴリは一貫性を保つ必要があります。これは、代入演算子の左側は左辺値でなければならないという規則に従っています。
以上がC の型推論は条件式の左辺値/右辺値の動作にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。