日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中关于类中常数静态成员初始化的问题

發布時間:2023/12/19 c/c++ 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)

詳細討論請見:
http://community.csdn.net/Expert/topic/4432/4432789.xml?temp=.3202783

特別感謝qfeng_zhao 、 lxpws 、 iGray 等幾位.

轉載于:https://www.cnblogs.com/shootingstars/archive/2006/01/23/321956.html

總結

以上是生活随笔為你收集整理的C++中关于类中常数静态成员初始化的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。