复合if语句在C中使用?:运算符

23C*_*hen 5 c c++ syntax if-statement ternary-operator

是否可以使用"?"编写等效的化合物"if"语句 C中的运算符?我想写一个"if - else if - else"语句,并想知道我是否可以使用"?" 运营商.

我相信使用"?"的常规语法 会是这样的

foo = (bar == 42) ? answerToEverything : useless;
Run Code Online (Sandbox Code Playgroud)

如果我想使用"?"在一行中重写以下语句 操作员,我可以这样做吗?怎么样?

if(bar == 42) {
  foo = answerToEverything;
} 
else if(bar == 23) {
  foo = bigMike;
} 
else foo = useless;
Run Code Online (Sandbox Code Playgroud)

Bil*_*nch 13

foo = 
    (bar == 42) ? answerToEverything :
    (bar == 23) ? bigMike :
    useless;
Run Code Online (Sandbox Code Playgroud)

  • @Ben:当我想要`foo`为const时,我通常会使用它,我希望包含结果的代码具有空间局部性. (3认同)
  • +1用于证明**正确的格式很重要**. (3认同)
  • @Ben:我还认为其他答案正在严格格式化他们的代码.如果我像他们那样格式化它,我就不会使用它. (2认同)
  • 不这样做的原因是它隐藏了存在的嵌套,你仍然需要"解析"它来理解它.使用嵌套ifs,在您开始查看细节之前,您的眼睛会"解析"您的结构(如果格式正确).我的意思是,上面看起来"整洁",但老实说,你真的可以看看它并告诉它它的作用吗? (2认同)

mae*_*ics 6

是的,你可以,但它很难看,很难理解!

我建议使用多行表单,因为它更容易理解:

if (bar == 42) {
  foo = answerToEverything;
} else if (bar == 23) {
  foo = bigMike;
} else {
  foo = useless;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果你真的想让你的代码难以阅读:

foo = (bar == 42)
  ? answerToEverything
  : (bar == 23)
      ? bigMike
      : useless;
Run Code Online (Sandbox Code Playgroud)

当然,您可以随意使用空格进行格式化.

  • IMO上面的格式比sharth更好,因为它实际上揭示了结构,而sharth隐藏了它.格式化的目的不是看起来漂亮,而是使结构明显. (3认同)