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

mdv*_*mdv 3 c++ ternary

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

说,我有一个if条件

if ( a ? b ? c : d : false)
{
    // do something
}
else
{
    // do something else
}
Run Code Online (Sandbox Code Playgroud)

这是我对其工作原理的解释:

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)
Run Code Online (Sandbox Code Playgroud)

我的理解是否正确?
使用这个更好还是多个if/ else支票?

Man*_*ani 5

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

if ( a ? (b ? c : d) : false)
{
    // do something
}
else
{
    // do something else
}
Run Code Online (Sandbox Code Playgroud)

  • 执行顺序不变。`?:`仅基于第一个计算第二和第三操作数之一。因此,括号不会更改执行顺序,只会提高可读性。 (2认同)

kfs*_*one 5

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

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

if (a ? b ? c : d : false)
Run Code Online (Sandbox Code Playgroud)

要么

if (a) {
    if (b)
        return c;
    else
        return d;
} else {
    return false;
}
Run Code Online (Sandbox Code Playgroud)

要么

if (!a)
    return false;
if (!b)
    return d;
return c;
Run Code Online (Sandbox Code Playgroud)

要么

if (a)
    return b ? c : d;
else
    return false;
Run Code Online (Sandbox Code Playgroud)

哪个是正确的选择?

  • 是的!清晰胜于简洁。 (2认同)