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

时间:2011-03-06 17:05:17

标签: c++ and-operator

当遇到(bool1&& bool2)时,如果发现bool1为false,c ++是否会尝试检查bool2,或者它是否像PHP一样忽略它?

很抱歉,如果这是一个基本的问题,但我真的无法在Schildt和互联网上找到这一点。

7 个答案:

答案 0 :(得分:52)

是的,C ++中的&&运算符使用short-circuit evaluation,因此如果bool1评估为false,则不会对bool2进行评估。

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

答案 1 :(得分:30)

C ++确实使用短路逻辑,因此如果bool1为假,则无需检查bool2

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

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

没有短路逻辑,它会在取消引用NULL指针时崩溃,但是使用短路逻辑,它可以正常工作。

答案 2 :(得分:15)

这是正确的(短路行为)。但请注意:如果调用的运算符不是内置运算符,而是用户定义的operator&&(与operator||相同),则短路停止。

Reference in this SO

答案 3 :(得分:2)

C ++中的&&运算符短路 - 如果示例中bool1为false,则不会检查/执行bool2

答案 4 :(得分:1)

这称为短路评估(Wikipedia)

&& operator是C ++中的短路运算符,如果bool1为false,它将不会评估bool2。

答案 5 :(得分:1)

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

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

答案 6 :(得分:0)

您所指的是short circuit evaluation。我认为它可能是编译器特定的,但是我链接的文章将其显示为特定于语言,并且C ++确实遵守。如果确实是编译器特定的,我无法想象一个不遵循它的编译器。我现在使用的日常编译器,VS 2008,确​​实如此。基本上它将遵循运算符优先级,并且一旦条件结果得到保证,