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就是这样。 基本上它会遵循运营商的优先级,一旦条件结果得到保证,