如果我有像A && B这样的两部分布尔检查而没有使用||的话,那么我希望如果A为false,则检查立即为false。但是,如果B是三元运算符,则情况似乎并非如此。

    var foo = false
        && false ? true : true;


foo在此示例中为true,大概是因为(&&三元)部分在某种程度上更像||。但是,如果我用括号将三元支票包围起来,它将按预期工作:

    var bar = false
        && (false ? true : true);


在此示例中,bar为false。

这种行为的原因/解释是什么?为什么我必须在布尔检查内将三元运算符和结果表达式括在方括号中?

最佳答案

由于评估的顺序,使用括号将其更改。第一个代码实际上是:

var foo = (false && false) ? true : true;


意思是:

if (false&&false)
 foo=true;
else
 foo=true;


第二个是:

var bar = false && (false ? true : true);

意思是

bool x
if (false)
 x=true;
else
 x=true;
if (false&&x)
 bar=true;
else
 bar=false;


一对括号会改变一切。

09-04 12:19
查看更多