C++編程語言中的類靜態成員如何才能正確的進行初始化呢?我們今天就為大家詳細介紹一下這方面的知識。希望能夠幫助大家充分的掌握C++類靜態成員初始化的應用技巧,以方便將來的程序開發。
C++類靜態成員初始化相關實現代碼介紹:
- class mytestclass
- {
- public:
- const static int i = 5;
- };
- int main()
- {
- std::cout<<mytestclass::i<<std::endl;
- return 0;
- }
結果沒有問題,輸出為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編譯鏈接都沒有問題)。。。,似乎代碼並沒有執行regi函數?
在C++類靜態成員初始化中初始化變量分為"動態初始化"和"靜態初始化","動態初始化"為利用函數進行初始化,"靜態初始化"為常量表達式進行初始化. C++標准對於類中的常量表達式的"動態初始化"似乎並未做說明,所以是否支持類中常數靜態變量的動態初始化也就取決與編譯器的設計了. 但是無論如何vc7.1的編譯結果都是不對的,它並沒有給出錯誤,但是結果與邏輯不向符合,這應該是vc7.1的一個bug.(在vs2005中的C++編譯器已經修正了這個bug,給出了一個編譯Error)