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)
詳細討論請見:
http://community.csdn.net/Expert/topic/4432/4432789.xml?temp=.3202783
特別感謝qfeng_zhao 、 lxpws 、 iGray 等幾位.
文章來源:
http://www.cnblogs.com/shootingstars/archive/2006/01/23/321956.html