1

我一直在想,也找不到关于这个问题的明确答案。

想象以下两个例子。

int i;
for(i=0;i<maxLimit;i++)
{
    //code here
}

第二个例子

for(int i=0;i<maxLimit;i++)
{
    //code here
}

基本上,如果他们是那样的,我相信两者的行为会完全相同,但是在考虑到这一点时,我的质疑就到位了

while(!file.EOF)
{
    for(int i=0;i<maxLimit;i++)
    {
        //code here
    }
}

当第二个示例在循环内部时,它如何执行?事先声明它并简单地将其放回 0 更有效还是执行时间与在内部声明它相同?

就我个人而言,我通常把它放在第 2 位,因为我发现它在视觉上更好。但我想知道它是否在一个循环内它会产生什么影响。

谢谢您的回答。

4

4 回答 4

4

大多数现代编译器都非常复杂,以至于您在此级别做出的任何决定都可能没有任何区别(澄清一下,经过分析,编译器可能已将两者转换为相同的内部表示 - 这是最有效的实现)。但是,如果您不相信,这种情况下的黄金法则是使用分析器进行检查。

于 2012-06-22T21:01:07.270 回答
2

是否在 -loop 之前声明它并不重要,因为即使for您在其中声明变量也会发生这种情况。第一个表达式之前的任何表达式在循环体之前执行,因此生成的汇编代码应该完全相同。

实际上,for在循环之前、循环之前的数百行或 for 循环主体内声明变量并不重要。程序行为保持完全相同,因此编译器可以并且通常会知道如何优化这些琐碎的情况。

于 2012-06-22T21:03:43.180 回答
1

我认为这两种情况都没有重大的性能问题。我通常也更喜欢使用示例 2,主要是因为我知道变量的确切范围,而且我最终不会给自己带来麻烦。

于 2012-06-22T21:02:28.190 回答
1

对于一个int值,这将具有完全零影响。如果变量有一个重要的构造函数,它可能会有所作为。正如其他人所说,首先编写代码,分析代码,然后考虑优化。这种变化充其量几乎总是一种微优化。

于 2012-06-22T21:09:33.790 回答