【发布时间】:2015-05-22 08:50:51
【问题描述】:
为什么这些代码显示不同的结果:
for (int i = 0; i < 5; ++i)
{
static int n = 0;
n++;
cout<<n<<endl; // prints 1 2 3 4 5
}
for (int i = 0; i < 5; ++i)
{
int n = 0;
n++;
cout<<n<<endl; // prints 1 1 1 1 1
}
如果静态变量 n 再次声明,为什么它会保留其先前的值。 “for”循环中静态变量的范围到底发生了什么? 为什么编译器在(第一次)循环的第二次迭代中没有显示再次声明现有变量的错误?
另外请说明为什么这些代码显示不同的结果:
for(i=0;i<5;i++)
{
static int n;
n=0;
n++;
cout<<n<<endl; //Print 1 1 1 1 1
}
for(i=0;i<5;i++)
{
static int n=0;
n++;
cout<<n<<endl; //Print 1 2 3 4 5
}
【问题讨论】:
-
"静态变量 n 又被声明了,为什么它保留它以前的值" 因为那是静态变量的重点。
-
您是否期望它们具有相同的结果?为什么?
-
为什么编译器在(第一个)循环的第二次迭代期间没有显示再次声明现有变量的错误?