在C++中,在for循环之外使用“if”还是在for循环中使用“if”更有效

问题描述 投票:0回答:2

我正在用 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
    }
}
c++ performance compiler-optimization loop-invariant
2个回答
8
投票

一次检查肯定更好,但是硬件(分支预测)和编译器(循环外的提升表达式和条件)都有一些功能,这使得很难预测两段源代码之间是否实际上存在运行时差异.

通常,您应该关注正确性和可维护性,并且只有在分析显示优化器错过性能时才出于性能原因才复制循环。


0
投票

编译器可能会为您解决这个问题,以便以最有效的方式执行它。您应该采取对您的问题更直观的方法。

在较高层次上,仅执行一次

if
比在循环的每次迭代中执行该操作更快,但同样,您应该执行更清晰的操作。

© www.soinside.com 2019 - 2024. All rights reserved.