我在閱讀其他代碼時遇到了一個有趣的情況。訪問靜態變量時內聯函數和靜態內聯函數之間的區別
在頭文件中,定義的靜態變量和一個內聯函數簡化爲以下:
static int ply;
inline int WTM(){return ply;}
和被調用的函數在某些其它cpp
文件包括此頭。
cout << ply << " " << WTM();
奇怪的是,在這裏這個函數被調用,內聯函數內部的變量ply
具有從功能之外的相同變量之前它不同的值。
輸出爲0 1;
我檢查了所有的文件,ply
和WTM()
都有這個單一的定義。
之後,我已經改變了代碼如下:
static int ply;
static inline int WTM(){return ply;}
兩個值成爲相同。
我的編譯器是g++ (GCC) 4.4.7
使用默認設置。
我搜索了這個現象,並獲得這兩鏈接: Difference between an inline function and static inline function 和 http://gcc.gnu.org/onlinedocs/gcc/Inline.html 但還是不明白爲什麼會發生(尤其是他們爲什麼會在第一種情況下有不同的值)。我不知道是否有人可以告訴我編譯器如何擴展這兩段代碼(我嘗試使用-E
,但它似乎不適用於內聯函數)。
我不明白「1」來自哪裏。無論範圍如何,它應該是0. – starmole
@starmole I * guess *在一個翻譯單元中有一個作業。 –
是的,實際上還有很多其他作業。 –