静态整数

时间:2012-12-05 00:55:43

标签: c++ static scope

我想知道静态是如何工作的。这是一个例子:

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”行呢?

4 个答案:

答案 0 :(得分:6)

这是一种语言规则; static变量的初始化只执行一次。

请注意,这与

不同
static int x;
x = 1;

会在每次通话中将x重置为1.

答案 1 :(得分:2)

静态本地变量有点像全局变量,只是编译器只允许一个函数访问它。所有静态分配的对象(内置或用户定义的类型),包括结构/类的静态成员变量,在调用main()函数之前由系统初始化一次。您可以通过创建类的全局(或静态文件范围)实例来使用此特性(或者如果您不知道发生了什么,则会获得一些好奇的行为),并在类构造函数中执行一些有趣的操作。该代码将在main()启动之前运行。

但是......你必须小心这样做。没有强制这些初始化对象的顺序的标准方法,所以如果一个人已经初始化了另一个,那么当你改变编译器或编译器选项,或添加/删除时,一天“工作正常”可能会开始“不正常”源文件等

答案 2 :(得分:1)

这就是规则所说的。您可以将static行视为仅在第一次调用函数时执行。

答案 3 :(得分:1)

是的。否则你根本无法读取x的值。但是,如果已经创建x,则不会设置它的值。