Conditional operator
The?: operator is called the conditional operator. It is at times also called the ternary operator. conditional-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 that can be implicitly converted to bool, or an expression of a type that implements operator true. If neither of these requirements is satisfied, a compile-time error occurs. The second and third operands, x and y, of the?: operator control the type of the conditional expression. · If x has type X and y has type Y then o If an implicit conversion (§6.1) exists from X to Y, but not from Y to X, then Y is the type of the conditional expression. o If an implicit conversion (§6.1) exists from Y to X, but not from X to Y, then X is the type of the conditional expression. o Otherwise, no expression type can be determined, and a compile-time error occurs. · If only one of x and y has a type, and both x and y, of areimplicitly convertible to that type, then that 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: o If an implicit conversion from the type of b to bool exists, then this implicit conversion is performed to produce a bool value. o 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.
|