【问题标题】:Making the conditional operators behave like if/else statements in C使条件运算符的行为类似于 C 中的 if/else 语句
【发布时间】:2020-12-05 21:48:34
【问题描述】:

是否可以让?: 运算符处理多个语句,如下例所示?

condition ? FirstTrueExpression SecondTrueExpression : FirstFalseExpression SecondFalseExpression

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

condition ? TrueExpression

【问题讨论】:

  • 标题不匹配但我不知道如何命名
  • @alvits 不。这是不允许的:while({x<10})
  • 问题:“我有一把螺丝刀。如何将它用作千斤顶来更换汽车的轮胎?”答案:“你不要。你用的是千斤顶。”在这种情况下使用的正确工具是if 语句,根据需要可以使用或不使用else。在此处使用?: 运算符最多只会导致难以理解、不可维护且容易出错的代码。或者,如果您想省略运算符的 : 部分,则会出现语法错误。
  • @AndrewHenle 这个问题不是关于“我应该如何编写我的代码”,而是关于整个语言的功能,但无论如何感谢您的回答
  • ?: 根本不处理语句,所以不,您不能让它处理 0、1、2 或更多语句。 ?: 的操作数是表达式,而不是语句。

标签: c conditional-statements conditional-operator


【解决方案1】:

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

condition ? FirstTrueExpression, SecondTrueExpression : (FirstFalseExpression, SecondFalseExpression)

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

你可以使用

condition && TrueExpression

而不是

condition ? TrueExpression

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

【讨论】:

  • 我不太明白关于优先级以及为什么最后一个主体周围应该有括号的问题
  • ?: 的优先级高于,,因此A ? B : C, D 被解释为(A ? B : C), D,而不是A ? B : (C, D),并且D 将被无条件评估。 demo
  • @MikeCAT - 运算符是?: - 没有? 运算符,这就是condition ? TrueExpression 不太可能正确编译的原因。
  • @Kaiyaha 你可能喜欢condition && TrueExpression 而不是condition ? TrueExpression
  • @MikeCAT - 你应该在你的答案中添加它。
猜你喜欢
  • 2019-12-12
  • 1970-01-01
  • 2011-04-07
  • 2011-02-18
  • 1970-01-01
  • 2022-01-09
  • 2023-03-03
  • 2011-06-04
  • 1970-01-01
相关资源
最近更新 更多