C++中关于类中常数静态成员初始化的问题
{
public:
??? const static int i = 5;
};
int main()
{
??? std::cout<<mytestclass::i<<std::endl;
??? return 0;
}
結(jié)果沒有問題,輸出為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(編譯鏈接都沒有問題)。。。
似乎代碼并沒有執(zhí)行regi函數(shù)?
在C++標(biāo)準(zhǔn)中將初始化變量分為"動(dòng)態(tài)初始化"和"靜態(tài)初始化","動(dòng)態(tài)初始化"為利用函數(shù)進(jìn)行初始化,"靜態(tài)初始化"為常量表達(dá)式進(jìn)行初始化.
C++標(biāo)準(zhǔn)對于類中的常量表達(dá)式的"動(dòng)態(tài)初始化"似乎并未做說明,所以是否支持類中常數(shù)靜態(tài)變量的動(dòng)態(tài)初始化也就取決與編譯器的設(shè)計(jì)了.
但是無論如何vc7.1的編譯結(jié)果都是不對的,它并沒有給出錯(cuò)誤,但是結(jié)果與邏輯不向符合,這應(yīng)該是vc7.1的一個(gè)bug.(在vs2005中的C++編譯器已經(jīng)修正了這個(gè)bug,給出了一個(gè)編譯Error)
詳細(xì)討論請見:
http://community.csdn.net/Expert/topic/4432/4432789.xml?temp=.3202783
特別感謝qfeng_zhao 、 lxpws 、 iGray 等幾位.
轉(zhuǎn)載于:https://www.cnblogs.com/shootingstars/archive/2006/01/23/321956.html
總結(jié)
以上是生活随笔為你收集整理的C++中关于类中常数静态成员初始化的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 临时表与表变量
- 下一篇: [转载]VC++程序员应当如何阅读ADO