有没有更好的方法来重写此代码段?

Cin*_*out 1 c++ if-statement

考虑以下:

if ((a || b) && (c || d))
{
    if (a && c) {...}
    else if (b && d) {...}
    else {...}
}
else {...}
Run Code Online (Sandbox Code Playgroud)

其中a,b,cd是导致表达式bool.

从代码中可以清楚地看出,很少有这些表达式被重新计算.在a)清晰度方面是否有更好的方法?b)效率?

Tim*_*sen 6

惊喜:我认为你真的不需要外部if声明.欣赏使用逻辑定律,外部if可以重写:

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

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

换句话说,如果(a && c)或者(b && d)为真,那么外部if将始终评估为true,因此可以将其删除.相反,你可以这样写:

if (a && c) {...}
else if (b && d) {...}
else if ((a && d) || (b && c)) {...}     // your original 'inner' else
else {...}                               // your original 'outer' else
Run Code Online (Sandbox Code Playgroud)