C ++ if语句中的优先级

时间:2012-07-12 00:44:53

标签: c++ standards operator-precedence

  

可能重复:
  Is Short Circuit Evaluation guaranteed In C++ as it is in Java?
  How does C++ handle &&? (Short-circuit evaluation)

我有以下结构定义和特定用例:

struct foo
{
   bool boo;
};

int main()
{
  foo* f = 0;
   .
   .
   .
  if ((f) && (f->boo)) // <--- point of contention
   return 0
  else
   return 1;
}

标准是否保证上面if语句中的第一组括号始终在第二组之前进行评估?

如果没有什么是最好的重写上面的代码?

目前我有以下一塌糊涂:

if (f)
{
   if (f->boo)
      return 0;
   else
      return 1;
}
else
   return 1;

2 个答案:

答案 0 :(得分:5)

是的,它是有保证的 - 括号是不必要的。

&&||都是短路运营商;它们评估左操作数,然后仅在需要确定结果时才评估右操作数。

答案 1 :(得分:5)

这可能是一种风格问题,但你可以说:

return (f && f->boo);

......或者稍微明确一点:

return ((f && f->boo) ? 1 : 0);
相关问题