通过多个函数调用来初始化局部静态变量

时间:2019-02-16 12:10:17

标签: c++

int f(int &g){
    static int a=g;
    a+=1;
    return a;
}

int main()
{
    int g=0;
    int a=f(g);
    g=10;
    a=f(g);
    cout<<a;
    return 0;
}

上面的代码给出输出2。 我的猜测是应该是11。

我确实了解到main函数中的a与f函数中的g=0不同。因此,我相信,当g=10时,f中的a将为1。然后,当a=11为11时,应以docker exec为主体。为什么不这样呢?谢谢!

1 个答案:

答案 0 :(得分:1)

您在此处误解了static关键字。当局部变量声明为static时,它将被初始化一次。在函数内部,这是第一次调用函数的时间。您首先在

中调用此函数
int g=0;
int a=f(g);

a中的局部变量f因此被初始化为零,然后递增。稍后,您第二次致电f

g=10;
a=f(g);

,但是由于局部变量已经初始化,因此不会被覆盖。取而代之的是第二个增量,其值为2