C ++如何处理&&? (短路评估)

遇到一个(bool1 && bool2)时,c ++是否会试图检查bool2,如果bool1被发现为false或者它忽略了PHP的方式?

对不起,如果这是一个问题太基本,但我真的无法在Schildt或互联网上find这样的提及。

是的,C ++中的&&运算符使用短路评估,因此如果bool1评估为false ,则不会打扰评估bool2

“短路评估”是您希望Google在索引中寻找的一个奇特术语。

C ++确实使用短路逻辑,所以如果bool1为false,则不需要检查bool2

如果bool2实际上是一个返回bool的函数或者使用一个指针,那么这很有用:

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

如果没有短路逻辑,它会在取消引用NULL指针时崩溃,但是由于短路逻辑,它工作正常。

这是正确的(短cicuit行为)。 但要小心:如果调用的操作符不是内置操作符,而是用户定义的operator&& (与operator||相同),则短路停止。

在这个SO的参考

C ++中的&&运算符短路 – 如果bool1在你的例子中是错误的, bool2将不会被检查/执行。

这被称为短路评估(Wikipedia)

&&运算符是C ++中的短路运算符,如果bool1为假,则不会评估bool2。

短路评估表示某些编程语言中某些布尔运算符的语义,其中第二个参数仅在第一个参数不足以确定expression式的值时执行或计算:例如,当AND函数评估为false,总体值必​​须为false; 当OR函数的第一个参数计算结果为true时,整体值必须为真。

在C ++中,&&和|| 运营商使用短路评估。

你所指的是短路评估 。 我认为它可能是编译器特定的,但是我链接到的文章显示它是特定于语言的,并且C ++确实遵守。 如果确实是编译器特定的,我无法想象一个不会遵循它的编译器。 我现在使用的编译器VS 2008就是这样。 基本上它会遵循运营商的优先级,一旦条件结果得到保证,