我想知道哪个更有效率。
假设我有这段代码:
while (i<10000){
if (cond1)
doSomething1();
else if (cond2)
doSomething2();
else
doSomething3();
}
现在 cond1 和 cond2 是“常量”条件,这意味着如果 i
发生一次,那么所有的条件都会发生,并且只有其中之一可能是真的。
大多数时候,最后一个 doSomething3()
会被执行。
现在如果我写这样的东西会发生什么:
if (cond1){
while (i<10000)
doSomething1();
}
else if (cond2){
while (i<10000)
doSomething2();
}
else{
while (i<10000)
doSomething3();
}
因为我只检查 cond1 和 cond2 一次,所以效率更高吗?
最佳答案
您需要问的是哪个缓存效率更高。
在许多情况下,编译器可以为您和 will rearrange your code to get the best results 解决这个问题。其执行此操作的能力很大程度上取决于 doSomethingN
的作用以及 condN
的含义。如果 condN 可以随着时间的推移而改变,那么它很可能每次都需要进行物理检查,在这种情况下,您的代码无法实质上重新安排,并且在每次循环迭代时检查它确实可能会慢得多。但是,如果 condN
是常量,则可以优化重复的检查,本质上导致您的第一个代码被转换为第二个代码。
最终,唯一确定的方法是测量它(如果您能理解的话,请研究生成的组件)。
关于c++ - if 语句位于循环内,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29330701/