我一直在想,并且找不到关于这个问题的明确答案。
想象一下以下两个例子。
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号,因为我觉得它在视觉上更好。但是我想知道它是否在循环内部会产生什么影响。
感谢您的回答。
答案 0 :(得分:4)
大多数现代编译器都非常复杂,以至于您在此级别做出的任何决策都可能没有任何区别(澄清一下,在分析之后,编译器可能已将两者转换为相同的内部表示 - 是最有效的实现)。但是,如果你不相信,在这种情况下的黄金法则是用一个分析器来检查。
答案 1 :(得分:2)
在<{1}}循环之前声明它不应该重要,因为即使你在其中声明变量,也会发生这种情况。在第一个; 之前的表达式是在循环体之前执行,因此生成的汇编代码应完全相同。
在实践中,如果在for
- 循环之前声明变量,循环之前或for循环体内数百行,则无关紧要。程序行为仍然完全相同,因此编译器可以,并且通常会知道如何优化像这样的琐碎案例。
答案 2 :(得分:1)
我不认为这两种情况都存在重大性能问题。我通常也喜欢使用示例2,主要是因为我知道变量的确切范围,并且最终我不会遇到麻烦。
答案 3 :(得分:1)
对于int
值,这将完全没有影响。如果变量有一个非平凡的构造函数,它可能会有所不同。正如其他人所说,首先编写代码,分析代码,然后考虑优化。这种变化几乎总是微观优化。