青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 18,  comments - 104,  trackbacks - 0
最近在coding的時候,寫了這么一段代碼:

 A.h
1// A.h
2#include <map>
3
4class A
5{
6public:
7    static std::map<intint> x;
8}
;

A.cpp
1// A.cpp
2#include "A.h"
3
4std::map<intint> Test::x;

很簡單,也很正常,看看用法吧。

main.cpp
 1class B
 2{
 3public:
 4    B();
 5}
;
 6
 7class C
 8{
 9public:
10    static B b;
11}
;
12
13B C::b;
14
15B::B()
16{
17    A::x[1= 2;
18}

19
20void main()
21{
22    A::x[3= 3;
23}

好了,按照上面的寫法,把代碼分別放到3個文件里面,編譯,通過, 鏈接,通過,運行,掛了!!why?
解決方案很簡單,把A.cpp里面的那句定義放到main.cpp里面就好了。

問題在于兩個static變量分別在兩個不同的文件里,A.cpp 里面那static變量要在main.cpp前初始化才行,可是編譯器不知道呀,結果main里面的先初始化了,等到調用A.cpp里面那個變量時,已經來不及啦。

這個就是依賴編譯器初始化順序的程序,如果有人運行沒有掛,那恭喜啦,等到它掛的時候你可要哭了。

上面的解決方案太爛了,如果程序規模很大,就完了,比如有好幾個cpp里面要用到A.cpp里面那個變量,放哪個里面好呢?
這時候,Scott Mayer的Singleton就是解決方案啦,它能保證靜態變量在使用前被初始化。

看看下面的代碼:
 1class static_
 2{
 3public:
 4   template <int N, class T>
 5   static T& var()
 6   {
 7       static T instance;
 8       return instance;
 9   }

10
11private:
12   ~static_() {}
13}
;

有了這個定義,想用靜態變量的時候就爽啦~~,用的時候:
1static_::var<0, std::string>() = ":)"
2static_::var<0, std::map<intint> >()[0= 3;
3static_::var<1, std::string>() = "haha";


現在的效果就是,想讓Test里面有什么,他就有什么,我指靜態變量。注意啦,第一個模板參數是為了可以定義同種類型的多個變量,就相當于
var_0, var_1...

是不是感覺有點動態語言的特性了,變量不用定義就可以用。而且變量初始化順序也不用關心啦,因為所有的變量會在使用前初始化完畢。

如果和boost::function合作起來,效果更佳。look!
 1class Fun
 2{
 3public:
 4    Fun()
 5        : UId(&static_::var<0, std::string>)
 6    {
 7    }

 8    // interface for static variable.
 9    boost::function<std::string& (void)> UId;
10}
;
11
12void main()
13{
14    Fun f1, f2;
15    // set static from f1
16    f1.UId() = "abc";
17    // get static from f2
18    std::string str = f2.UId();
19}

好了,static就到這里吧。
posted on 2009-03-20 14:16 尹東斐 閱讀(4678) 評論(5)  編輯 收藏 引用

FeedBack:
# re: static 變量初始化順序的問題和解決方案。
2009-03-20 14:31 | 陳梓瀚(vczh)
final solution:不要用不是singleton的全局變量,singleton不要循環依賴。  回復  更多評論
  
# re: static 變量初始化順序的問題和解決方案。
2009-03-20 14:55 | 尹東斐
@陳梓瀚(vczh)

很精辟,贊。  回復  更多評論
  
# re: static 變量初始化順序的問題和解決方案。
2009-03-22 17:28 | 阿福1
# re: static 變量初始化順序的問題和解決方案。
2010-09-28 17:36 | 網絡監控
如何控制static變量析構的順序呢?  回復  更多評論
  
# re: static 變量初始化順序的問題和解決方案。
2010-10-14 16:34 | 匿名
main.cpp 編譯不過,沒有include "A.h"
加入后可以正常運行  回復  更多評論
  

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2025年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

常用鏈接

留言簿(4)

隨筆檔案

文章分類

文章檔案

相冊

好友博客

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            老司机67194精品线观看| 亚洲欧洲日产国码二区| 国产精品久久久久9999| 欧美精品少妇一区二区三区| 蜜臀av国产精品久久久久| 免费欧美网站| 欧美日韩播放| 国产精品福利网站| 国产午夜精品理论片a级大结局 | 国产主播一区| 国产专区精品视频| 亚洲国产一区视频| 亚洲视频一区| 久久精品国产亚洲a| 另类人畜视频在线| 欧美激情免费观看| 亚洲图片欧洲图片日韩av| 久久超碰97人人做人人爱| 欧美成人一品| 国产视频一区在线| 亚洲精品一区在线观看| 午夜电影亚洲| 亚洲国产一区二区三区青草影视 | 国产亚洲精品aa午夜观看| 亚洲国产毛片完整版 | 亚洲成人直播| 性欧美在线看片a免费观看| 欧美成人午夜激情| 亚洲一区二区三区免费观看| 久久久999精品视频| 国产精品九色蝌蚪自拍| 亚洲电影网站| 欧美在线三级| 91久久久久久久久| 久久久亚洲影院你懂的| 国产精品国产馆在线真实露脸| 亚洲国产mv| 久久嫩草精品久久久久| av成人动漫| 欧美成人精品在线观看| 黄色小说综合网站| 欧美影院成人| 在线视频一区二区| 欧美日韩三级视频| 亚洲精品视频在线播放| 美女脱光内衣内裤视频久久影院| 亚洲在线一区二区| 国产精品啊v在线| 一区二区三区日韩精品| 亚洲韩国一区二区三区| 欧美91精品| 亚洲国产日韩在线一区模特| 久久久久久久久综合| 午夜伦欧美伦电影理论片| 欧美午夜精品久久久久久超碰| 亚洲人成在线观看一区二区 | 亚洲午夜女主播在线直播| 亚洲国产一区在线| 亚洲日本中文字幕| 国产亚洲欧美日韩精品| 最新国产成人av网站网址麻豆| 久久久激情视频| 亚洲亚洲精品三区日韩精品在线视频 | 亚洲男人的天堂在线aⅴ视频| 欧美激情一区二区久久久| 欧美在现视频| 国内外成人在线视频| 久热这里只精品99re8久| 久久成人18免费观看| 国产一区二区在线观看免费播放| 欧美在线视频观看免费网站| 欧美一级久久久| 红桃视频国产精品| 久久综合色播五月| 欧美大尺度在线| 中日韩午夜理伦电影免费| 亚洲视频一区二区免费在线观看| 国产精品日产欧美久久久久| 久久久久99精品国产片| 可以看av的网站久久看| 一二三区精品| 欧美制服丝袜第一页| 亚洲国产精品一区二区www在线| 亚洲成人在线视频网站| 欧美日韩精品在线观看| 久久精品在线| 欧美精品v日韩精品v国产精品 | 亚洲国产成人av| 国产精品久久久久久久app| 欧美在线观看你懂的| 模特精品裸拍一区| 欧美在线精品免播放器视频| 巨乳诱惑日韩免费av| 亚洲午夜羞羞片| 久久精品成人| 亚洲欧美电影在线观看| 久久免费少妇高潮久久精品99| 99riav1国产精品视频| 亚洲欧美在线x视频| 亚洲蜜桃精久久久久久久| 西瓜成人精品人成网站| 99在线|亚洲一区二区| 欧美一区二区三区四区高清 | 亚洲小少妇裸体bbw| 亚洲国产美女精品久久久久∴| 亚洲天堂av在线免费观看| 亚洲国产精品视频一区| 亚洲欧美国产va在线影院| 亚洲国产网站| 欧美一站二站| 午夜精品美女自拍福到在线| 欧美国内亚洲| 牛夜精品久久久久久久99黑人 | 欧美视频第二页| 久久久久久成人| 国产精品免费电影| 夜夜精品视频一区二区| 亚洲国产精品久久久久秋霞影院 | 国产欧美精品在线| 亚洲伦理中文字幕| 亚洲电影自拍| 久久久www| 久久久久久久性| 国产视频不卡| 午夜精品久久久久久久99黑人| 一区二区三区高清在线| 欧美成人午夜77777| 免费日韩成人| 在线免费日韩片| 这里只有精品视频| 欧美日韩国产免费| 99精品视频免费观看| 中文精品视频一区二区在线观看| 久久夜色精品国产欧美乱| 久久久久网址| 狠狠色狠狠色综合日日91app| 欧美有码在线观看视频| 久久嫩草精品久久久久| 1000部精品久久久久久久久| 久久这里有精品15一区二区三区| 美女网站在线免费欧美精品| 欲香欲色天天天综合和网| 久久久午夜视频| 亚洲国产成人精品久久| 99精品99久久久久久宅男| 欧美日韩在线视频观看| 亚洲综合色在线| 两个人的视频www国产精品| 亚洲国产美女久久久久| 欧美久久电影| 亚洲欧美日韩在线不卡| 欧美在线观看网址综合| 狠狠入ady亚洲精品| 欧美国产精品一区| 一区二区三区成人| 久久精精品视频| 亚洲电影毛片| 欧美日韩综合一区| 亚欧美中日韩视频| 亚洲国产网站| 欧美一级成年大片在线观看| 国内精品伊人久久久久av影院| 亚洲欧美国产另类| 在线观看亚洲专区| 欧美日韩综合视频网址| 午夜欧美不卡精品aaaaa| 欧美xx69| 亚洲欧美日韩直播| 1024成人网色www| 欧美午夜在线观看| 久久夜色精品国产亚洲aⅴ | 亚洲黄色影院| 午夜在线观看免费一区| 亚洲电影免费观看高清| 国产精品免费视频观看| 亚洲第一区中文99精品| 久久精品一区蜜桃臀影院| 欧美肥婆在线| 久久9热精品视频| 91久久久亚洲精品| 国产三级精品三级| 欧美私人啪啪vps| 玖玖在线精品| 欧美一区二区三区免费在线看| 亚洲人体影院| 快射av在线播放一区| 亚洲欧美日韩天堂| 一本到高清视频免费精品| 黄色成人av网站| 国产日韩专区| 国产美女高潮久久白浆| 欧美日韩免费在线观看| 另类激情亚洲| 久久精品国产一区二区三区| 亚洲私拍自拍| 一本不卡影院| 亚洲日本电影| 亚洲国产日韩欧美一区二区三区| 久久国产精品久久精品国产| 亚洲午夜av电影|