C++ if语句中的优先级

Sod*_*der 0 c++ standards operator-precedence

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

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

struct foo
{
   bool boo;
};

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

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

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

目前我有以下一塌糊涂:

if (f)
{
   if (f->boo)
      return 0;
   else
      return 1;
}
else
   return 1;
Run Code Online (Sandbox Code Playgroud)

Kei*_*son 5

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

二者&&||有短路操作员; 它们评估左操作数,然后仅在需要确定结果时才评估右操作数.


Kev*_*ant 5

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

return (f && f->boo);
Run Code Online (Sandbox Code Playgroud)

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

return ((f && f->boo) ? 1 : 0);
Run Code Online (Sandbox Code Playgroud)