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