roo*_*kie 7 c++ lazy-evaluation
关于c ++的懒惰评估,我有一些问题,我能确定这段代码总能正常工作,还是不好主意?如果是,为什么?提前致谢
if(currentNode == 0 ||*currentNode == element){return; }
Pét*_*rök 19
它保证工作:从左到右计算逻辑AND和OR表达式链,如果第一个子表达式满足条件,则不再评估其他子表达式.
在您的情况下,如果currentNode为null,它将永远不会被第二个子表达式取消引用,因此代码是安全的.
正如@jdv指出的那样,这称为短路评估,而不是懒惰评估.后者是一种编程技术,您可以透明地向客户端仅在第一次具体需要时计算所需值.一个简单的例子:
class Example {
SomeClass *theObject = null;
public:
SomeClass *getTheObject() {
if (!theObject) {
theObject = doResourceConsumingCalculation();
}
return theObject;
}
};
Run Code Online (Sandbox Code Playgroud)
请注意,客户端Example不知道theObject延迟评估的实现细节,因此您可以在急切和惰性评估之间来回切换,而不会影响类的公共接口.
(当然,在实际的生产代码中,getTheObject应该在一个单独的cpp文件中实现,它应该包括同步,错误处理代码等.这只是一个简单的例子:-)
| 归档时间: |
|
| 查看次数: |
7234 次 |
| 最近记录: |