[導入]C++中關于類中常數(shù)靜態(tài)成員初始化的問題
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)初始化"為利用函數(shù)進行初始化,"靜態(tài)初始化"為常量表達式進行初始化.
C++標準對于類中的常量表達式的"動態(tài)初始化"似乎并未做說明,所以是否支持類中常數(shù)靜態(tài)變量的動態(tài)初始化也就取決與編譯器的設計了.
但是無論如何vc7.1的編譯結(jié)果都是不對的,它并沒有給出錯誤,但是結(jié)果與邏輯不向符合,這應該是vc7.1的一個bug.(在vs2005中的C++編譯器已經(jīng)修正了這個bug,給出了一個編譯Error)
詳細討論請見:
http://community.csdn.net/Expert/topic/4432/4432789.xml?temp=.3202783
特別感謝qfeng_zhao 、 lxpws 、 iGray 等幾位.
shootingstars 2006-01-23 11:46 發(fā)表評論
文章來源:http://www.cnblogs.com/shootingstars/archive/2006/01/23/321956.html
posted on 2007-07-31 13:17 shootingstars 閱讀(579) 評論(0) 編輯 收藏 引用 所屬分類: C++