下面是用關鍵字static聲明兩個變量:C++:靜態成員不能在聲明中定義,但靜態函數變量可以?
void fcn() {
static int x = 2;
}
class cls() {
static int y;
};
我們都知道,爲了cls
正確鏈接,int cls::y
需要由程序員明確定義一次。
基於答案static variables in an inlined function,似乎即使需要fcn::x
外的類的定義,可以保證從不同的編譯單元的fcn
甚至內嵌版本將引用同一個fcn::x
。如果這是真的,那麼鏈接器必須足夠聰明才能在編譯單元之間到達並連接「同一個」變量的多個實例,以確保靜態函數變量按預期執行。
如果這是可能的靜態函數變量,在我看來,它也應該是可能的靜態類成員...那麼,爲什麼不標準需要靜態類成員的單外的類定義?