59

当遇到 (bool1 && bool2) 时,如果 bool1 被发现为假,c++ 是否会尝试检查 bool2 还是会像 PHP 那样忽略它?

对不起,如果这是一个太基本的问题,但我真的在 Schildt 和互联网上都找不到提及。

4

7 回答 7

69

是的,&&C++ 中的运算符使用短路评估,因此 ifbool1评估false它不会打扰评估bool2.

“短路评估”是您想在 Google 上搜索并在索引中查找的花哨术语。

||运算符也是如此,如果计算结果bool1为,true则整个表达式将计算为真,而不计算bool2

如果您想评估所有表达式,您可以使用&and|运算符。

于 2011-03-06T17:07:23.440 回答
37

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

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

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

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

于 2011-03-06T17:08:12.820 回答
19

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

此 SO 中的参考

于 2011-03-06T17:09:16.697 回答
2

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

于 2011-03-06T17:08:05.970 回答
1

这称为短路评估(维基百科)

&& 运算符是 C++ 中的短路运算符,如果 bool1 为假,它将不会计算 bool2。

于 2011-03-06T17:08:14.567 回答
1

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

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

于 2011-03-06T17:53:15.653 回答
0

您指的是短路评估。我认为它可能是特定于编译器的,但是我链接到的那篇文章显示它是特定于语言的,并且 C++ 确实遵守。如果它确实是特定于编译器的,我无法想象一个不会遵循它的编译器。我目前使用的日常编译器 VS 2008 可以。基本上它会遵循运算符的优先级,并且一旦保证了条件结果,

于 2011-03-06T17:12:24.330 回答