在循环内声明的变量

Stu*_*nes 20 c for-loop

如果我要在循环内声明一个变量,那么在循环之外使用声明会更快吗?程序是否n在每次迭代时重新分配内存或在整个过程中使用相同的内存位置?

for(int i=0;i<10;i++)
{
    int n = getNumber();
    printf("%d\n",n);
}
Run Code Online (Sandbox Code Playgroud)

int n;
for(int i=0;i<10;i++)
{
    n = getNumber();
    printf("%d\n",n);
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 15

任何现代编译器都会将它们优化为相同的机器代码,因此您应该看不出任何区别.

  • 在循环中定义更清晰,并且可能产生更优化的代码,因为编译器知道生命周期(尽管可能不是简单类型) (2认同)

Meh*_*ari 14

变量不是真正"创造"或"破坏"的.它们是编程语言抽象层次的概念.编译器不需要在变量和内存地址之间进行一对一映射.实际上,大多数情况下,局部变量的堆栈空间在函数开头一次分配,因此它不会对性能产生影响.

请注意,C++与C(不包含构造函数的概念)不同,它支持对象构造和销毁,因此如果要在for循环中定义类类型的变量,如下所示,

class MyClass { 
    public: MyClass() { cout << "hello world" << endl; }
};
//...
for (int i = 0; i < 10; ++i) {
   MyClass m;
} 
Run Code Online (Sandbox Code Playgroud)

你每次都会调用它的构造函数,有效地打印"hello world"十次.这与C声明非常不同,不应与它混淆.