C++;布尔或函数内调用表达式的延迟求值 快速提问,C++中的这个表达式是懒惰的吗?< /P> bool funca(); bool funcb(); funca() || funcb(); // line in question
显然,这(可能)只是以下内容的简写:C++;布尔或函数内调用表达式的延迟求值 快速提问,C++中的这个表达式是懒惰的吗?< /P> bool funca(); bool funcb(); funca() || funcb(); // line in question,c++,lazy-evaluation,C++,Lazy Evaluation,显然,这(可能)只是以下内容的简写: bool funca(); bool funcb(); if (!funca()) { funcb(); } // or even more concisely: if (!funca()) funcb(); < C++会评估我希望的那一行吗?谢谢。在C/C++中,逻辑运算符短路。在a | | b中,如果a为真,则不计算b,如果a为假,则不计算b 小心:这只发生在&和| |上,而不是发生在|和&上,它被称为a。但是,是的,关于“| |”,它是
bool funca();
bool funcb();
if (!funca()) {
funcb();
}
// or even more concisely:
if (!funca()) funcb();
< C++会评估我希望的那一行吗?谢谢。在C/C++中,逻辑运算符短路。在
a | | b
中,如果a
为真,则不计算b
,如果a
为假,则不计算b
小心:这只发生在
&
和| |
上,而不是发生在|
和&
上,它被称为a。但是,是的,关于“| |”,它是懒惰的,因为如果条件必须求值为true,那么它就会停止(例如,如果(a | | b)在a为true时不会求值b)。与“&&”类似,如果(a&&b)中a为false,则不计算b。否。延迟计算意味着仅当需要包含子表达式的表达式时才计算该子表达式。由于您放弃了完整表达式的结果,因此延迟计算将不计算任何内容
如果您编写了writebolean(funcA()| | funcB())代码>惰性求值将对funcA()求值,因为这是绝对必要的,而且可能是funcB
<>但是C++不是这样工作的;C++没有懒惰的评价。即使放弃表达式的结果,仍会对其求值。您进行了短路评估。是否调用funcB
,并不取决于是否使用完整表达式,而是取决于funcA
的结果