我想知道静态是如何工作的。这是一个例子:
void count()
{
static int x = 1;
cout << "Static: " << x << endl;
x++;
return;
}
int main()
{
//Static variable test
cout << endl;
count();
count();
}
该程序输出“1和2”。但我想知道第二次调用函数“count”时,为什么不执行“static int x = 1”行呢?
答案 0 :(得分:6)
这是一种语言规则; static
变量的初始化只执行一次。
请注意,这与
不同static int x;
x = 1;
会在每次通话中将x
重置为1.
答案 1 :(得分:2)
静态本地变量有点像全局变量,只是编译器只允许一个函数访问它。所有静态分配的对象(内置或用户定义的类型),包括结构/类的静态成员变量,在调用main()函数之前由系统初始化一次。您可以通过创建类的全局(或静态文件范围)实例来使用此特性(或者如果您不知道发生了什么,则会获得一些好奇的行为),并在类构造函数中执行一些有趣的操作。该代码将在main()启动之前运行。
但是......你必须小心这样做。没有强制这些初始化对象的顺序的标准方法,所以如果一个人已经初始化了另一个,那么当你改变编译器或编译器选项,或添加/删除时,一天“工作正常”可能会开始“不正常”源文件等
答案 2 :(得分:1)
这就是规则所说的。您可以将static
行视为仅在第一次调用函数时执行。
答案 3 :(得分:1)
是的。否则你根本无法读取x
的值。但是,如果已经创建x
,则不会设置它的值。