0

可能重复:
在 C++ 中是否保证短路评估,就像在 Java 中一样?
C++如何处理&&?(短路评估)

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

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;
4

2 回答 2

5

是的,这是有保证的——括号是不必要的。

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

于 2012-07-12T00:47:04.997 回答
5

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

return (f && f->boo);

...或者更明确地说:

return ((f && f->boo) ? 1 : 0);
于 2012-07-12T00:47:48.703 回答