程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++類靜態成員初始化相關問題答疑

C++類靜態成員初始化相關問題答疑

編輯:C++入門知識

C++編程語言中的類靜態成員如何才能正確的進行初始化呢?我們今天就為大家詳細介紹一下這方面的知識。希望能夠幫助大家充分的掌握C++類靜態成員初始化的應用技巧,以方便將來的程序開發。

C++類靜態成員初始化相關實現代碼介紹:

  1. class mytestclass   
  2. {   
  3. public:   
  4. const static int i = 5;   
  5. };   
  6. int main()   
  7. {   
  8. std::cout<<mytestclass::i<<std::endl;   
  9. return 0;   
  10. }  

結果沒有問題,輸出為5編譯器為vc7.1),但是在下面這個例子中:

  1. int regi()   
  2. {   
  3. return 5;   
  4. }   
  5. class mytestclass   
  6. {   
  7. public:   
  8. const static int i = regi();   
  9. };   
  10. int main()   
  11. {   
  12. std::cout<<mytestclass::i<<std::endl;   
  13. return 0;   

輸出卻不正確,輸出為0編譯鏈接都沒有問題)。。。,似乎代碼並沒有執行regi函數?

在C++類靜態成員初始化中初始化變量分為"動態初始化"和"靜態初始化","動態初始化"為利用函數進行初始化,"靜態初始化"為常量表達式進行初始化. C++標准對於類中的常量表達式的"動態初始化"似乎並未做說明,所以是否支持類中常數靜態變量的動態初始化也就取決與編譯器的設計了. 但是無論如何vc7.1的編譯結果都是不對的,它並沒有給出錯誤,但是結果與邏輯不向符合,這應該是vc7.1的一個bug.(在vs2005中的C++編譯器已經修正了這個bug,給出了一個編譯Error)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved