eat*_*hil 13 c++ lazy-evaluation
快速提问,在c ++中,这个表达式被懒惰地评估了吗?
bool funca();
bool funcb();
funca() || funcb(); // line in question
Run Code Online (Sandbox Code Playgroud)
显然这是(可能)只是以下的简写:
bool funca();
bool funcb();
if (!funca()) {
funcb();
}
// or even more concisely:
if (!funca()) funcb();
Run Code Online (Sandbox Code Playgroud)
c ++会不会评估原来的那条线,因为我希望它会?谢谢.
不会。惰性求值意味着仅当需要包含子表达式的表达式时才求值。由于您丢弃了完整表达式的结果,因此惰性求值不会计算任何内容。
如果您编写了writeBoolean(funcA() || funcB());
惰性求值,则会对 funcA() 求值,因为这绝对是必要的,而且可能还对 funcB 求值。
但这不是 C++ 的工作原理。C++ 没有惰性求值。即使您丢弃表达式的结果,它仍然会被计算。您确实得到了短路评估。是否funcB
被调用并不取决于完整表达式的使用,但它取决于 的结果funcA
。