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
为主体。为什么不这样呢?谢谢!
答案 0 :(得分:1)
您在此处误解了static
关键字。当局部变量声明为static
时,它将被初始化一次。在函数内部,这是第一次调用函数的时间。您首先在
int g=0;
int a=f(g);
a
中的局部变量f
因此被初始化为零,然后递增。稍后,您第二次致电f
,
g=10;
a=f(g);
,但是由于局部变量已经初始化,因此不会被覆盖。取而代之的是第二个增量,其值为2
。