我已经尽力阅读了大量SO.SE上的Q&A,但是我没有找到与我的特定问题相关的答案。大多数与
所以,这就带我提出了一个后续问题。在性能方面,
我已经在我的电脑上尝试过了,但是执行时间相同。并且我担心编译器及其优化功能的黑魔法,所以我想知道概念上的答案。
编辑: 请注意,在我的完整代码中,我已经测量了两个版本的执行时间,没有任何实质性的差异。此外,我不信任使用
for-loop
和break
有关的问题涉及嵌套循环,而我关注的是性能。
我想知道在C++中,在for-loop
中使用break
是否会影响性能(假设几乎从不调用break)。如果有影响,我也想暂时知道处罚的大小。
我非常怀疑它确实会影响性能(尽管我不知道有多大)。所以我想问你。我的推理如下:
无论条件语句的额外代码为何触发
break
(如if
),它必然向我的循环添加附加指令。此外,它可能还会在编译器尝试展开
for-loop
时出现问题,因为它不再知道将在编译时运行的迭代次数,从而有效地将其转换为while-loop
。因此,我怀疑它确实对性能产生影响,这对于非常快速和紧密的循环来说可能是相当大的。
所以,这就带我提出了一个后续问题。在性能方面,
for-loop
和break
是否与while-loop
相等?就像在以下代码片段中一样,我们假设checkCondition()
的评估99.9%是true
。我会失去for-loop
的性能优势吗?// USING WHILE
int i = 100;
while( i-- && checkCondition())
{
// do stuff
}
// USING FOR
for(int i=100; i; --i)
{
if(checkCondition()) {
// do stuff
} else {
break;
}
}
我已经在我的电脑上尝试过了,但是执行时间相同。并且我担心编译器及其优化功能的黑魔法,所以我想知道概念上的答案。
编辑: 请注意,在我的完整代码中,我已经测量了两个版本的执行时间,没有任何实质性的差异。此外,我不信任使用
-s
进行编译(我通常这样做),因为我对我的编译器的特定结果不感兴趣。我更感兴趣的是概念本身(从学术角度来看),因为我不确定我是否理解得完全正确 :)