1

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

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

4 回答 4

6

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

请注意,这不同于

static int x;
x = 1;

这将x在每次调用中重置为 1。

于 2012-12-05T00:57:23.377 回答
2

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

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

于 2012-12-05T01:03:47.420 回答
1

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

于 2012-12-05T00:56:49.167 回答
1

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

于 2012-12-05T00:57:24.170 回答