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

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>
            麻豆精品视频在线| 国产精品久久久久三级| 亚洲精品小视频在线观看| 欧美多人爱爱视频网站| 亚洲国产黄色| 欧美.www| 亚洲精品一区中文| 亚洲视频第一页| 亚洲欧美日韩国产另类专区| 欧美一区二区播放| 欧美高清视频www夜色资源网| 欧美精品在线观看一区二区| 国产精品亚洲精品| 亚洲激情在线播放| 亚洲一区二区av电影| 久久er精品视频| 欧美国产日韩一区二区三区| 亚洲精品无人区| 久久精品国产77777蜜臀| 欧美日韩国产在线看| 欧美天天综合网| 黄色亚洲在线| 日韩午夜免费视频| 久久精品一区二区三区不卡牛牛| 欧美电影在线观看完整版| 亚洲视频1区| 欧美α欧美αv大片| 国产情人综合久久777777| 亚洲精品你懂的| 久久久噜噜噜久久久| 99在线热播精品免费| 久久人人看视频| 国产日产欧美a一级在线| 一级日韩一区在线观看| 免费中文日韩| 欧美一区在线直播| 欧美视频在线一区| 亚洲另类春色国产| 久久久999国产| 亚洲小说欧美另类婷婷| 欧美a级理论片| 伊人成人在线视频| 久久久精品一区二区三区| 亚洲视频一区二区免费在线观看| 欧美成人中文字幕| 亚洲国产日韩欧美在线图片| 久久免费偷拍视频| 欧美中文字幕视频| 国产日韩欧美一区二区| 欧美一区二区三区四区视频| 一区二区三区福利| 欧美午夜视频在线观看| 亚洲图片欧洲图片日韩av| 亚洲另类黄色| 欧美精品久久一区| 91久久精品网| 亚洲国产另类 国产精品国产免费| 久久久久久久久伊人| 一区二区视频欧美| 免费国产自线拍一欧美视频| 欧美一区激情视频在线观看| 国产精品自拍网站| 久久爱www久久做| 久久成人综合视频| 亚洲国产天堂久久综合| 亚洲人成网站精品片在线观看| 欧美精品日韩一区| 正在播放亚洲一区| 亚洲影视中文字幕| 国产一区二区久久久| 久久野战av| 欧美国产视频在线| 亚洲综合国产| 香蕉免费一区二区三区在线观看| 黄网站免费久久| 亚洲高清在线播放| 国产精品极品美女粉嫩高清在线 | 欧美高清不卡| 篠田优中文在线播放第一区| 禁断一区二区三区在线| 欧美电影在线| 欧美韩国在线| 亚洲欧美国产另类| 久久美女艺术照精彩视频福利播放| 尤物网精品视频| 亚洲精品裸体| 国产亚洲一区二区精品| 欧美成人激情在线| 国产精品swag| 久久久精彩视频| 欧美精品18+| 久久久视频精品| 欧美日韩免费观看中文| 久久久中精品2020中文| 欧美日韩天堂| 欧美成人午夜77777| 欧美理论电影网| 久久久精品日韩欧美| 欧美视频中文字幕| 欧美电影免费观看高清| 国产精品日本| 亚洲日本在线视频观看| 激情欧美日韩| 亚洲视频网在线直播| 91久久夜色精品国产九色| 亚洲午夜羞羞片| 日韩午夜在线播放| 欧美中日韩免费视频| 亚洲视频在线一区观看| 免费成人高清| 久久网站热最新地址| 国产精品久久久免费| 欧美黄免费看| 亚洲第一色在线| 久久精品一区二区三区中文字幕 | 亚洲精品麻豆| 亚洲图片激情小说| 一区二区三区视频在线观看| 快射av在线播放一区| 久久综合久久综合久久综合| 国产精品欧美激情| 中文一区二区| 亚洲素人一区二区| 欧美精品色网| 亚洲人成精品久久久久| 亚洲国产日韩一区| 久久人91精品久久久久久不卡| 久久天天躁狠狠躁夜夜爽蜜月| 欧美天天影院| 亚洲一二区在线| 午夜精品视频一区| 国产精品a级| 亚洲一区二区三区涩| 午夜精品在线看| 国产精品久久久久秋霞鲁丝| 亚洲午夜日本在线观看| 亚洲欧美日韩区| 国产欧美日韩免费| 亚洲精品午夜| 亚洲风情亚aⅴ在线发布| 在线播放亚洲| 久久天天躁狠狠躁夜夜av| 狂野欧美一区| 亚洲国产成人不卡| 欧美黑人多人双交| 夜夜嗨av一区二区三区| 亚洲自拍啪啪| 欧美日韩国产大片| 中国女人久久久| 久久精品国产第一区二区三区最新章节 | 久久久精品国产一区二区三区| 国产区二精品视| 久久偷看各类wc女厕嘘嘘偷窃| 蘑菇福利视频一区播放| 最新国产成人在线观看| 欧美—级高清免费播放| 亚洲图片欧洲图片av| 久久精品国产清高在天天线 | 欧美成人精品一区二区三区| 99这里有精品| 久久一综合视频| 欧美国产日韩亚洲一区| 日韩一本二本av| 久久精品官网| 亚洲欧洲三级| 国产女主播一区二区三区| 久久高清福利视频| 亚洲人成网站精品片在线观看| 亚洲天堂偷拍| 在线观看日韩国产| 国产精品jizz在线观看美国 | 欧美在线视频免费观看| 亚洲激情欧美激情| 午夜一区不卡| 亚洲女同精品视频| 久久免费99精品久久久久久| 亚洲另类春色国产| 国产欧美日韩中文字幕在线| 欧美不卡视频一区发布| 亚洲乱码国产乱码精品精98午夜| 欧美一区=区| 亚洲国产高清一区二区三区| 国产精品v片在线观看不卡 | 午夜在线精品| 一区二区三区精品国产| 久久久久久久国产| 在线亚洲欧美| 亚洲电影在线看| 国产亚洲一本大道中文在线| 国产精品成人一区二区网站软件 | 亚洲一区二区三区精品视频| 亚洲国产成人午夜在线一区| 国产模特精品视频久久久久| 欧美日韩国产一区二区三区地区| 精品成人久久| 国产精品乱子久久久久| 久久九九精品99国产精品| 亚洲午夜在线视频| 亚洲精选久久| 欧美国产视频一区二区|