C++ 是如何实现的?处理 &&? (短路评价)

发布于 2024-10-20 07:20:47 字数 143 浏览 6 评论 0原文

当遇到 (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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

甜心 2024-10-27 07:20:47

是的,C++ 中的 && 运算符使用短路评估< /a> 这样,如果 bool1 计算结果为 false,它就不会费心计算 bool2

“短路评估”是一个奇特的术语,你想在谷歌上搜索并在索引中查找。

|| 运算符也会发生同样的情况,如果 bool1 计算结果为 true,则整个表达式将计算结果为 true,而不计算 bool2

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

Yes, the && operator in C++ uses short-circuit evaluation so that if bool1 evaluates to false it doesn't bother evaluating bool2.

"Short-circuit evaluation" is the fancy term that you want to Google and look for in indexes.

The same happens with the || operator, if bool1 evaluates to true then the whole expression will evaluate to true, without evaluating bool2.

In case you want to evaluate all expressions anyway you can use the & and | operators.

可遇━不可求 2024-10-27 07:20:47

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

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

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

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

C++ does use short-circuit logic, so if bool1 is false, it won't need to check bool2.

This is useful if bool2 is actually a function that returns bool, or to use a pointer:

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

without short-circuit logic, it would crash on dereferencing a NULL pointer, but with short-circuit logic, it works fine.

睫毛溺水了 2024-10-27 07:20:47

这是正确的(短路行为)。但要注意:如果调用的运算符不是内置运算符,而是用户定义的运算符&&(与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 with operator||).

Reference in this SO

青朷 2024-10-27 07:20:47

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

The && operator short circuits in C++ - if bool1 was false in your example, bool2 wouldn't be checked/executed.

醉梦枕江山 2024-10-27 07:20:47

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

运算符是 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.

盗梦空间 2024-10-27 07:20:47

短路求值表示某些编程语言中某些布尔运算符的语义,其中仅当第一个参数不足以确定表达式的值时才执行或求值第二个参数:例如,当 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.

亽野灬性zι浪 2024-10-27 07:20:47

您指的是短路评估。我认为它可能是特定于编译器的,但是我链接到的那篇文章显示它是特定于语言的,并且 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,

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文