我有一个简单的问题来优化我的代码。
bool myfunc();
if (false && true && myfunc())
{
}
是否会调用函数myfunc()
??
答案 0 :(得分:8)
因为C ++具有short-circuit evaluation条件,所以不会调用该函数,因为第一个false
使得整个表达式无论如何都是假的。
如果您更改了顺序,那么首先放置函数调用(即myfunc() && false && true
),然后调用该函数。无论false
返回什么,表达式的结果仍然是myfunc
。
答案 1 :(得分:4)
没有
&&
和||
进行短路评估,即一旦结果明确知晓(false
&&
和true
||
1}})评估停止。而且它始终是从左到右。
在这种情况下,编译器甚至可能选择完全忽略if
语句,因为编译时的条件已知为false
,因此之后的代码无法访问。
答案 2 :(得分:1)
不,myfunc()
将不会被调用,因为第一个false
,编译器将停在那里。这被称为短路评估。