C++布尔值或函数调用表达式的惰性计算
C++ lazy evaluation of boolean or in function call expression
快速问题,在 C++ 中,这个表达式是懒惰计算的吗?
bool funca();
bool funcb();
funca() || funcb(); // line in question
显然,这(可能)只是以下内容的简写:
bool funca();
bool funcb();
if (!funca()) {
funcb();
}
// or even more concisely:
if (!funca()) funcb();
c++ 会像我希望的那样评估有问题的原始行吗?谢谢。
在 C/C++ 中,逻辑运算符短路。a || b
如果a
为真b
则不计算;a && b
如果a
为假b
则不计算。
小心:这只发生在&&
和||
,而不是|
和&
。
这称为短路评估。但是,是的 - 关于"||",它是懒惰的,因为如果条件必须计算为 true,那么它就会停止(例如,如果 (a || b) 如果 a 为真,则不会计算 b)。与"&&"类似,如果(a&&b)其中a为假b不被计算。
No.惰性计算意味着仅当需要包含子表达式的表达式时才计算子表达式。由于您丢弃了完整表达式的结果,因此惰性求值不会评估任何内容。
如果你写了writeBoolean(funcA() || funcB());
惰性求值就会计算funcA(),因为这绝对是必要的,而且可能是funcB。
但这不是C++的工作方式;C++没有懒惰的计算。即使您放弃表达式的结果,它仍会被计算。您确实会得到短路评估。是否调用funcB
并不取决于完整表达式的使用,但确实取决于funcA
的结果。
相关文章:
- (C++)分析树以计算返回错误值的简单算术表达式
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 编译器是否强制根据模板参数计算表达式?
- 为什么'typeid(x) == typeid(y)'的计算结果为 true,其中 'x' 和 'y' 分别是 T 和 T& 类型的 id-表达式?
- 如何在常量计算表达式中获取编译时错误?
- 计算表达式字符串由 std::map 中的键组成
- GDB 如何在运行时计算C++表达式
- 从C++调用 Python 或 Lua 来计算表达式,仅在需要时计算未知变量
- 错误指针:解析令牌时无法计算表达式
- 在c++lldb中使用重载运算符计算表达式
- 在不使用函数 pow 的情况下计算表达式的总和
- 使用 std::map<std::string, int> 计算表达式树
- 我怎么知道编译器是否C++编译时计算表达式
- BSTR bstrRtf = 0xcccccccccccccccc <调试时错误 Ptr>( = CXX0030:错误:无法计算表达式)
- 正在计算表达式C++
- CXX0030:错误:无法计算表达式
- 计算表达式
- 为什么c++应用程序可能不正确地计算表达式
- char*中的C++错误PTR(无法计算表达式)