我正在用 C++ 编写一个程序,我正在争论是否将“if”放在循环中。我想象做一次检查然后循环总体上比不断循环和检查更有效,但我不太确定。或者这些都不重要,因为编译器无论如何都会优化它?
这样效率更高吗?
for(int i = 0; i < SOME_BOUND; i++){
if(SOME_CONDITION){
//Some actions
}
else {
//Some actions
}
}
或者这样更有效率吗?
if(SOME_CONDITION){
for(int i = 0; i < SOME_BOUND; i++){
//Some Actions
}
}
else {
for(int i = 0; i < SOME_BOUND; i++){
//Some Actions
}
}
一次检查肯定更好,但是硬件(分支预测)和编译器(循环外的提升表达式和条件)都有一些功能,这使得很难预测两段源代码之间是否实际上存在运行时差异.
通常,您应该关注正确性和可维护性,并且只有在分析显示优化器错过性能时才出于性能原因才复制循环。
编译器可能会为您解决这个问题,以便以最有效的方式执行它。您应该采取对您的问题更直观的方法。
在较高层次上,仅执行一次
if
比在循环的每次迭代中执行该操作更快,但同样,您应该执行更清晰的操作。