今天我遇到了一个有趣的问题。请看下面的伪代码:
void Loop()
{
static int x = 1;
printf("%d", x);
x++;
}
void main(void)
{
while(true)
{
Loop();
}
}
即使x是静态的,为什么这段代码每次都不仅仅只打印出“1”呢?在打印之前,我每次都将x重新初始化为1。但不知何故,x按预期递增。
我在每次迭代中都将x重新初始化为1。
不,你没有这样做:你只是将其初始化为1,但它只会被初始化一次。
static
并不意味着const
。
来自MSDN:
当修改变量时,static关键字指定变量具有静态持续时间(在程序开始时分配,在程序结束时释放)并将其初始化为0,除非指定了另一个值。当在文件作用域处修改变量或函数时,static关键字指定变量或函数具有内部链接(其名称在声明它的文件之外不可见)。
在函数中声明为static的变量保留其在调用该函数之间的状态。
在类声明中修改数据成员时,static关键字指定该成员的一个副本由该类的所有实例共享。在类声明中修改成员函数时,static关键字指定该函数仅访问静态成员。
static的值在每个函数调用之间保留,例如(再次引用MSDN):
// static1.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
void showstat( int curr ) {
static int nStatic; // Value of nStatic is retained
// between each function call
nStatic += curr;
cout << "nStatic is " << nStatic << endl;
}
int main() {
for ( int i = 0; i < 5; i++ )
showstat( i );
}