7.12 Conditional operator

# 7.12 Conditional operator

Visual Studio .NET 2003

The `?:` operator is called the conditional operator. It is at times also called the ternary operator.

conditional-expression:
conditional-or-expression
conditional-or-expression   ?   expression   :   expression

A conditional expression of the form `b ?` `x :` `y` first evaluates the condition `b`. Then, if `b` is `true`, `x` is evaluated and becomes the result of the operation. Otherwise, `y` is evaluated and becomes the result of the operation. A conditional expression never evaluates both `x` and `y`.

The conditional operator is right-associative, meaning that operations are grouped from right to left. For example, an expression of the form `a ?` `b :` `c ?` `d :` `e` is evaluated as `a ?` `b :` `(c ?` `d :` `e)`.

The first operand of the `?:` operator must be an expression of a type that can be implicitly converted to `bool`, or an expression of a type that implements `operator` `true`. If neither requirement is satisfied, a compile-time error occurs.

The second and third operands of the `?:` operator control the type of the conditional expression. Let `X` and `Y` be the types of the second and third operands. Then,

• If `X` and `Y` are the same type, then this is the type of the conditional expression.
• Otherwise, if an implicit conversion (Section 6.1) exists from `X` to `Y`, but not from `Y` to `X`, then `Y` is the type of the conditional expression.
• Otherwise, if an implicit conversion (Section 6.1) exists from `Y` to `X`, but not from `X` to `Y`, then `X` is the type of the conditional expression.
• Otherwise, no expression type can be determined, and a compile-time error occurs.

The run-time processing of a conditional expression of the form `b ?` `x :` `y` consists of the following steps:

• First, `b` is evaluated, and the `bool` value of `b` is determined:
• If an implicit conversion from the type of `b` to `bool` exists, then this implicit conversion is performed to produce a `bool` value.
• Otherwise, the `operator` `true` defined by the type of `b` is invoked to produce a `bool` value.
• If the `bool` value produced by the step above is `true`, then `x` is evaluated and converted to the type of the conditional expression, and this becomes the result of the conditional expression.
• Otherwise, `y` is evaluated and converted to the type of the conditional expression, and this becomes the result of the conditional expression.
Show: