C++ 是如何实现的?处理 &&? (短路评价)
当遇到 (bool1 && bool2) 时,如果 bool1 被发现为 false,c++ 是否会尝试检查 bool2 还是会像 PHP 那样忽略它?
抱歉,如果这个问题太基础了,但我确实在 Schildt 和互联网上都找不到提及这一点。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
是的,C++ 中的
&&
运算符使用短路评估< /a> 这样,如果bool1
计算结果为false
,它就不会费心计算bool2
。“短路评估”是一个奇特的术语,你想在谷歌上搜索并在索引中查找。
||
运算符也会发生同样的情况,如果bool1
计算结果为true
,则整个表达式将计算结果为 true,而不计算bool2
。如果您想计算所有表达式,您可以使用
&
和|
运算符。Yes, the
&&
operator in C++ uses short-circuit evaluation so that ifbool1
evaluates tofalse
it doesn't bother evaluatingbool2
."Short-circuit evaluation" is the fancy term that you want to Google and look for in indexes.
The same happens with the
||
operator, ifbool1
evaluates totrue
then the whole expression will evaluate to true, without evaluatingbool2
.In case you want to evaluate all expressions anyway you can use the
&
and|
operators.C++ 确实使用短路逻辑,因此如果
bool1
为 false,则不需要检查bool2
。如果 bool2 实际上是一个返回 bool 的函数,或者使用指针,那么这很有用:
如果没有短路逻辑,它会在取消引用 NULL 指针时崩溃,但使用短路逻辑,它可以正常工作。
C++ does use short-circuit logic, so if
bool1
is false, it won't need to checkbool2
.This is useful if bool2 is actually a function that returns bool, or to use a pointer:
without short-circuit logic, it would crash on dereferencing a NULL pointer, but with short-circuit logic, it works fine.
这是正确的(短路行为)。但要注意:如果调用的运算符不是内置运算符,而是用户定义的运算符&&(与
operator||
相同),短路就会停止。本 SO 中的参考
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 withoperator||
).Reference in this SO
C++ 中的
&&
运算符短路 - 如果示例中的bool1
为 false,则不会检查/执行bool2
。The
&&
operator short circuits in C++ - ifbool1
was false in your example,bool2
wouldn't be checked/executed.这称为短路评估(维基百科)
运算符是 C++ 中的短路运算符,如果 bool1 为 false,则不会计算 bool2。
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.
短路求值表示某些编程语言中某些布尔运算符的语义,其中仅当第一个参数不足以确定表达式的值时才执行或求值第二个参数:例如,当 AND 的第一个参数函数计算结果为 false,则整体值必须为 false;当 OR 函数的第一个参数计算结果为 true 时,整体值也必须为 true。
在 C++ 中, &&和 ||操作员使用短路评估。
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.
您指的是短路评估。我认为它可能是特定于编译器的,但是我链接到的那篇文章显示它是特定于语言的,并且 C++ 确实遵循这一点。如果它确实是特定于编译器的,我无法想象编译器不会遵循它。我目前使用的日常编译器 VS 2008 可以。基本上它会遵循运算符优先级,并且一旦条件结果得到保证,
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,