用短路操作代替链式ifs

时间:2013-03-21 21:22:13

标签: c++ c short-circuiting

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

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

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

我想把这个表达写成一个短路评估。

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

但我从未在C / C ++代码中看到过这种测试。我缺少这种方法有什么问题吗?

感谢。

2 个答案:

答案 0 :(得分:3)

您编写的代码有效。只有在其他布尔函数返回d()时才会计算false

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

答案 1 :(得分:2)

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