可能重复:
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;
答案 0 :(得分:5)
是的,它是有保证的 - 括号是不必要的。
&&
和||
都是短路运营商;它们评估左操作数,然后仅在需要确定结果时才评估右操作数。
答案 1 :(得分:5)
这可能是一种风格问题,但你可以说:
return (f && f->boo);
......或者稍微明确一点:
return ((f && f->boo) ? 1 : 0);