一个最小的工作示例如下:
#include <iostream>
void func()
{
static int i = 5;
std::cout << i << std::endl;
i = 42;
std::cout << i << std::endl;
}
int main( int argc, char ** argv )
{
std::cout << "this is main()" << std::endl;
func();
func();
return 0;
}
其输出如下:
this is main()
i is 5
i is 42
i is 42
i is 42
变量int的static修饰符使int的值在整个进程的生命周期内保持不变,而静态存储不存储在堆栈中;因此,该值从函数的一次调用传递到另一次调用。
但是,当第二次调用func ()时, int在 func()的开头重新赋值为 5 。
那么,为什么这个示例输出i = 42
而不是i = 5
?