C++類靜態(tài)成員初始化相關(guān)問題答疑
C++編程語言中的類靜態(tài)成員如何才能正確的進(jìn)行初始化呢?我們今天就為大家詳細(xì)介紹一下這方面的知識。希望能夠幫助大家充分的掌握C++類靜態(tài)成員初始化的應(yīng)用技巧,以方便將來的程序開發(fā)。
C++類靜態(tài)成員初始化相關(guān)實(shí)現(xiàn)代碼介紹:
- class mytestclass
- {
- public:
- const static int i = 5;
- };
- int main()
- {
- std::cout<<mytestclass::i<<std::endl;
- return 0;
- }
結(jié)果沒有問題,輸出為5(編譯器為vc7.1),但是在下面這個例子中:
- int regi()
- {
- return 5;
- }
- class mytestclass
- {
- public:
- const static int i = regi();
- };
- int main()
- {
- std::cout<<mytestclass::i<<std::endl;
- return 0;
- }
輸出卻不正確,輸出為0(編譯鏈接都沒有問題)。。。,似乎代碼并沒有執(zhí)行regi函數(shù)?
在C++類靜態(tài)成員初始化中初始化變量分為"動態(tài)初始化"和"靜態(tài)初始化","動態(tài)初始化"為利用函數(shù)進(jìn)行初始化,"靜態(tài)初始化"為常量表達(dá)式進(jìn)行初始化. C++標(biāo)準(zhǔn)對于類中的常量表達(dá)式的"動態(tài)初始化"似乎并未做說明,所以是否支持類中常數(shù)靜態(tài)變量的動態(tài)初始化也就取決與編譯器的設(shè)計了. 但是無論如何vc7.1的編譯結(jié)果都是不對的,它并沒有給出錯誤,但是結(jié)果與邏輯不向符合,這應(yīng)該是vc7.1的一個bug.(在vs2005中的C++編譯器已經(jīng)修正了這個bug,給出了一個編譯Error)
【編輯推薦】