请考虑以下事项:
if ((a || b) && (c || d))
{
if (a && c) {...}
else if (b && d) {...}
else {...}
}
else {...}
其中a
,b
,c
和d
是导致bool
的表达式。
从代码中可以清楚地看出,很少有这些表达式被重新计算。在a)清晰度方面是否有更好的方法? b)效率?
答案 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变量中。
如果表达式不涉及函数调用(因此很明显它们在语句之间可能没有变化),我希望编译器无论如何都要优化它。