用短路操作代替链式ifs

use*_*412 5 c c++ short-circuiting

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

if(!a()) {
    if(!b()) {
        if(!c()) {
            d();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

if(!a() && !b() && !c()) d();
Run Code Online (Sandbox Code Playgroud)

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

(a() || b() || c() || d());
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

mey*_*mer 3

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

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

  • 你理解错了。如果没有其他函数返回 true,则评估“d()”。我想这说明了你关于可读性的观点。 (3认同)