How does C++ handle &&? (Short-circuit evaluation)

2019-01-01 07:11发布

This question already has an answer here:

When encountering a (bool1 && bool2), does c++ ever attempts to check bool2 if bool1 was found false or does it ignore it the way PHP does?

Sorry if it is too basic of a question, but I really could not find a mentioning of that neither in Schildt nor on the Internet.

7条回答
春风洒进眼中
2楼-- · 2019-01-01 07:48

That is correct (short-cicuit behavior). But beware: short-circuiting stops if the operator invoked is not the built-in operator, but a user-defined operator&& (same with operator||).

Reference in this SO

查看更多
梦醉为红颜
3楼-- · 2019-01-01 07:52

Short-circuit evaluation denotes the semantics of some Boolean operators in some programming languages in which the second argument is only executed or evaluated if the first argument does not suffice to determine the value of the expression: for instance, when the first argument of the AND function evaluates to false, the overall value must be false; and when the first argument of the OR function evaluates to true, the overall value must be true.

In C++, both && and || operators use short-circuit evaluation.

查看更多
余生无你
4楼-- · 2019-01-01 07:54

The && operator short circuits in C++ - if bool1 was false in your example, bool2 wouldn't be checked/executed.

查看更多
初与友歌
5楼-- · 2019-01-01 07:55

C++ does use short-circuit logic, so if bool1 is false, it won't need to check bool2.

This is useful if bool2 is actually a function that returns bool, or to use a pointer:

if ( pointer && pointer->someMethod() )

without short-circuit logic, it would crash on dereferencing a NULL pointer, but with short-circuit logic, it works fine.

查看更多
孤独总比滥情好
6楼-- · 2019-01-01 07:59

This is called short-circuit evaluation (Wikipedia)

The && operator is a short circuit operator in C++ and it will not evaluate bool2 if bool1 is false.

查看更多
美炸的是我
7楼-- · 2019-01-01 08:00

What you're referring to is short circuit evaluation. I thought that it may be compiler specific, however that article I linked to shows it as language specific, and C++ does adhere. If it is indeed compiler specific, I can't imagine a compiler that wouldn't follow it. The day to day compiler I use at the moment, VS 2008, does. Basically it will follow the operator precedence, and as soon as the condition result is guaranteed,

查看更多
登录 后发表回答