5

这是一个非常微不足道的问题:有四个布尔函数:a()、b()、c() 和 d()。我想继续按顺序调用它们,直到第一个返回true。而不是做传统的

if(!a()) {
    if(!b()) {
        if(!c()) {
            d();
        }
    }
}

或者

if(!a() && !b() && !c()) d();

我考虑将表达式写为短路评估。

(a() || b() || c() || d());

但我从未见过在 C/C++ 代码中以这种方式完成此测试。我缺少这种方法有什么问题吗?

谢谢。

4

2 回答 2

3

您编写的代码是有效的。d()只有当其他布尔函数返回时才会被评估false

然而,短路评估的可读性较差,并且从维护的角度来看容易出错,因为读者可能无法轻易理解它。

于 2013-03-21T21:30:42.180 回答
2

它们是等效的,但短路评估解决方案的可读性可能会降低,尤其是在函数名称很长或接受参数的情况下。

于 2013-03-21T21:29:46.097 回答