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

时间:2016-08-10 08:33:26

标签: c++ if-statement

请考虑以下事项:

if ((a || b) && (c || d))
{
    if (a && c) {...}
    else if (b && d) {...}
    else {...}
}
else {...}

其中abcd是导致bool的表达式。

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

2 个答案:

答案 0 :(得分:6)

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

if ((a || b) && (c || d))

if ( ((a && c) || (a && d)) || ((b && c) || (b && d)) )

换句话说,如果(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

答案 1 :(得分:2)

简单回答:您可以在if语句之前将表达式存储在bool变量中。

如果表达式不涉及函数调用(因此很明显它们在语句之间可能没有变化),我希望编译器无论如何都要优化它。