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

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 尹東斐 閱讀(4677) 評論(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"
加入后可以正常運行  回復  更多評論
  
<2009年3月>
22232425262728
1234567
891011121314
15161718192021
22232425262728
2930311234

常用鏈接

留言簿(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>
            亚洲欧美日韩人成在线播放| 欧美成人午夜激情在线| 国内精品久久久久久久影视蜜臀| 国产精品综合网站| 国产精品一区二区久久久| 国产乱码精品| 国内免费精品永久在线视频| 亚洲国产精品福利| 亚洲精品专区| 亚洲一区二区精品视频| 亚洲欧洲99久久| 久久米奇亚洲| 欧美美女操人视频| 国产深夜精品| 日韩亚洲欧美在线观看| 新狼窝色av性久久久久久| 免费亚洲电影| 99精品免费视频| 久久性天堂网| 国产精品久久久久久久一区探花 | 亚洲日本va午夜在线电影| 中日韩美女免费视频网站在线观看| 一本色道婷婷久久欧美| 久久久免费精品| 欧美四级电影网站| 亚洲国产美女精品久久久久∴| 亚洲视频精品在线| 麻豆精品在线视频| 亚洲特色特黄| 欧美成人国产| 国际精品欧美精品| 中文欧美字幕免费| 欧美国产1区2区| 性欧美暴力猛交69hd| 欧美日本一区| 亚洲精品久久在线| 久久精品视频免费| 亚洲视频一区二区| 欧美精品福利| 亚洲国产视频直播| 久久久久久色| 亚洲男人第一网站| 欧美日韩精品免费看| 久久久久久久久伊人| 欧美三级电影一区| 亚洲人成77777在线观看网| 欧美自拍丝袜亚洲| 亚洲一区二区免费| 国产精品家庭影院| 一区二区三区导航| 99日韩精品| 欧美日韩亚洲天堂| 亚洲美女精品久久| 亚洲精品国产精品乱码不99按摩| 久久久久久亚洲精品不卡4k岛国| 国产麻豆精品久久一二三| 午夜精品久久99蜜桃的功能介绍| 亚洲免费不卡| 欧美午夜视频在线| 欧美在线黄色| 欧美一区二区福利在线| 国产精品一区二区在线| 欧美亚洲免费高清在线观看| 亚洲在线播放电影| 国产精品网站在线观看| 久久se精品一区二区| 亚洲在线视频| 国产一区导航| 美日韩精品视频| 美女福利精品视频| 亚洲精品久久久一区二区三区| 亚洲精品1区| 国产精品嫩草99av在线| 久久久亚洲午夜电影| 免费观看成人www动漫视频| 一本色道久久综合亚洲精品小说| 亚洲视频你懂的| 在线观看精品| 一区二区三区精品视频在线观看 | 亚洲国产日韩一级| 亚洲六月丁香色婷婷综合久久| 国产精品www| 久久久综合网| 欧美激情2020午夜免费观看| 亚洲视频在线观看三级| 亚洲一区二区三区乱码aⅴ| 激情欧美一区二区三区| 亚洲欧洲一区二区天堂久久| 国产噜噜噜噜噜久久久久久久久| 乱人伦精品视频在线观看| 欧美成人激情视频| 久久av二区| 欧美精品午夜| 久久久成人精品| 欧美高清在线一区二区| 久久国产精品99精品国产| 欧美激情1区2区| 久久蜜臀精品av| 欧美日韩中文字幕在线视频| 毛片精品免费在线观看| 欧美日韩在线视频一区| 麻豆精品视频| 国产精品视频999| 亚洲国产成人午夜在线一区| 国产欧美日韩综合| 99re8这里有精品热视频免费| 午夜电影亚洲| 最新亚洲一区| 欧美一区二区女人| 亚洲一区二区在线免费观看| 开心色5月久久精品| 午夜精品久久久久久久99黑人| 欧美www视频| 欧美~级网站不卡| 国产欧美一区二区精品仙草咪| 亚洲韩国精品一区| 影音先锋中文字幕一区二区| 亚洲一区视频| 亚洲综合999| 欧美精品在线观看91| 欧美国产日韩精品| 一区二区三区在线看| 欧美一区二区三区免费在线看| 亚洲香蕉伊综合在人在线视看| 男人的天堂亚洲| 蜜臀a∨国产成人精品 | 亚洲午夜精品一区二区| 欧美精品麻豆| 亚洲精品免费电影| 亚洲美洲欧洲综合国产一区| 久久综合福利| 欧美第十八页| 亚洲黄色性网站| 欧美xxxx在线观看| 欧美大片免费观看在线观看网站推荐| 国产性色一区二区| 羞羞视频在线观看欧美| 久久久久这里只有精品| 精久久久久久| 美女黄网久久| 亚洲欧洲日产国产网站| 亚洲视频第一页| 国产精品卡一卡二| 午夜欧美精品| 久久久久久久一区| 亚洲电影网站| 欧美久久99| 一区二区三区四区精品| 午夜精品一区二区三区在线视| 国产精品免费在线| 欧美一区国产二区| 免费永久网站黄欧美| 99精品99| 国产精品制服诱惑| 久久精品视频免费播放| 欧美高清在线一区| 亚洲视频精选在线| 韩国久久久久| 最新高清无码专区| 欧美一区二区成人| 亚洲国产精品v| 欧美网站大全在线观看| 午夜老司机精品| 亚洲国产高潮在线观看| 香蕉尹人综合在线观看| 经典三级久久| 欧美视频精品在线| 久久精品成人一区二区三区蜜臀| 亚洲国产精品久久久久久女王| 亚洲一区二区在线看| 在线观看视频免费一区二区三区| 欧美久久婷婷综合色| 欧美在线视频播放| 亚洲黄色成人网| 久久高清福利视频| 99视频有精品| 久久久久久久网| 亚洲三级毛片| 久久中文久久字幕| 亚洲午夜在线视频| 在线观看成人小视频| 国产精品一二| 欧美区一区二区三区| 久久久久久久91| 亚洲资源在线观看| 亚洲精品欧洲| 欧美ed2k| 久久免费午夜影院| 午夜日本精品| av成人免费在线观看| 亚洲黄色在线| 永久域名在线精品| 国产一区二区久久精品| 国产精品青草久久| 欧美天天在线| 欧美视频不卡中文| 欧美日韩精品欧美日韩精品| 嫩草国产精品入口| 欧美不卡在线视频| 免费观看日韩|