使条件运算符的行为类似于 C 中的 if/else 语句

Kai*_*aha 1 c conditional-operator conditional-statements

是否可以让?:操作员处理以下示例中的多个语句?

condition ? FirstTrueExpression SecondTrueExpression : FirstFalseExpression SecondFalseExpression
Run Code Online (Sandbox Code Playgroud)

有没有办法避免指定“else”语句?

condition ? TrueExpression
Run Code Online (Sandbox Code Playgroud)

Mik*_*CAT 7

您可以使用逗号运算符,连接多个表达式。表达式从左到右求值,其结果类型和值将是右侧表达式的类型和值。

condition ? FirstTrueExpression, SecondTrueExpression : (FirstFalseExpression, SecondFalseExpression)
Run Code Online (Sandbox Code Playgroud)

请注意,您需要()周围(FirstFalseExpression, SecondFalseExpression)由于运算符优先级,而你并不需要()身边FirstTrueExpression, SecondTrueExpression

您可以使用

condition && TrueExpression
Run Code Online (Sandbox Code Playgroud)

代替

condition ? TrueExpression
Run Code Online (Sandbox Code Playgroud)

这要归功于逻辑和运算符的短路评估&&
condition为 false 时,无论 的值如何,condition && TrueExpression都将为 false ( 0) TrueExpression,因此TrueExpression不会被评估。
condition为真时,TrueExpression因为需要确定 的值而被评估condition && TrueExpression

  • `?:` 的优先级高于 `,`,因此 `A ? B : C, D` 被解释为“(A ? B : C), D”,而不是“A ? B : C), D”。B : (C, D)` 和 `D` 将被无条件评估。[演示](https://wandbox.org/permlink/AadvmK9dDtDvFIeT) (2认同)