![](/img/trans.png)
[英]Static variable initialization as a class member or local function variable (Singleton example)
[英]Initialization of a local static variable throught multiple function calls
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 函數中的 a 不同。 所以當g=0
,a in f 將是 1,我相信。 然后當g=10
,它應該是 11,在 main 中給出a=11
。 為什么不是這樣? 謝謝!
您在這里誤解了static
關鍵字。 當一個局部變量被聲明為static
,它會被初始化一次。 在函數內部,這是第一次調用 then 函數的時間。 你首先調用這個函數
int g=0;
int a=f(g);
因此, f
內部的局部變量a
被初始化為零,然后遞增。 稍后,你第二次調用f
,
g=10;
a=f(g);
但由於局部變量已經初始化,它不會被覆蓋。 相反,發生第二次增量,結果為2
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.