c ++中的多个三元运算符

时间:2013-09-26 05:32:54

标签: c++ ternary

我对以下场景(C ++)有疑问:

说,我有一个if条件

if ( a ? b ? c : d : false)
{
    // do something
}
else
{
    // do something else
}

这是我对其运作方式的解释:

If a is true, it checks b. Then,
    - If b is true, the if loop is reduced to if (c)
    - If b is false, the if loop is reduced to if (d)
If a is false, the if loop is reduced to if (false)

我的理解是否正确?
是使用此更好还是多次if / else检查?

5 个答案:

答案 0 :(得分:5)

你的问题分为两部分,首先是关于声明的行为,然后是关于你是否应该这样做;请允许我向您展示有多少程序员会解决第二个问题。

想象一下,星期六早上4点30分你就会被挂掉,这段代码中有一个错误,你需要在接下来的30分钟内修复它,否则你的工作/生意会有风险。

if (a ? b ? c : d : false)

if (a) {
    if (b)
        return c;
    else
        return d;
} else {
    return false;
}

if (!a)
    return false;
if (!b)
    return d;
return c;

if (a)
    return b ? c : d;
else
    return false;

哪个是正确的选择?

答案 1 :(得分:4)

请在括号中使用它,因为它有助于提高可读性。此外,使用多个三元运算符也很好。

if ( a ? (b ? c : d) : false)
{
    // do something
}
else
{
    // do something else
}

答案 2 :(得分:1)

是的,你说的是正确的:

If a is true, it checks b. Then,
    - If b is true, the if condition is reduced to if (c)
    - If b is false, the if condition is reduced to if (d)
If a is false, the if condition is reduced to if (false)

但if()不是循环而是条件语句。并且在括号中写入条件使其更具可读性。

if ( a ? (b ? c : d) : false)

或者你可以简化它:

if ( a && (b ? c : d))

答案 3 :(得分:1)

  

我的理解是否正确?

是的,您的解释是正确的。

  

使用这个更好还是多次if / else检查?

如您所知,代码:

if ( a ? b ? c : d : false)
{
   "Code-1"
}
else
{
   "Code-2"
}

可以写成:

if(a){  
  if(b){
    if (c){
       "code-1"
    }
    else{
       "code-2"       
    }
  }
  else{
    if(d){
       "code-1"
    }
    else{
       "code-2"
    }
  }
}
else{  
   //then false;       
    "Code-2"
}

现在你更喜欢上面两个。第二个是很长的,包括许多嵌套的级别代码(很难理解和bug)。另外,第一个代码可以提高可读性:

if ( a ? (b ? c : d) : false) 

@ManikandanSigamani回答。

正如我所说,@ WhozCraig还提供了另一种技术,可以使用支持短路逻辑的if (a && (b ? c : d))更好地编写代码&&

一个优秀的程序员是一个知道一种技术来解决问题并且知道哪种更好的人。通常,短线性编码是优选的。在小写中,小代码出错的机会较少(看起来像函数式编程比命令式编程更好)。在@ManikandanSigamani和@WhozCraig建议的情况下,可以轻松改进小代码。

我更愿意:if (a && (b ? c : d))表格!

答案 4 :(得分:0)

虽然它有效,但像这样嵌套三元运算符很少可读。

将其写为

if ( a && (( b && c ) || d )) {
  // do something
} else {
  // do something else
}

是,imho,更具可读性,并且不会比原始代码长。