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

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>
            中国女人久久久| 亚洲午夜精品一区二区| 奶水喷射视频一区| 欧美大片在线观看| 亚洲愉拍自拍另类高清精品| 91久久线看在观草草青青| 欧美精品久久久久久| 亚洲一区二区视频在线| 亚洲专区国产精品| 亚洲国产精品尤物yw在线观看| 亚洲第一天堂av| 国产精品美女xx| 亚洲国产一区二区在线| 国产日韩欧美一二三区| 欧美成人中文| 国产日韩专区| 中文亚洲欧美| 亚洲国产中文字幕在线观看| 午夜在线成人av| 99视频精品在线| 久久尤物电影视频在线观看| 午夜精品久久久久久99热| 欧美美女bb生活片| 亚洲高清自拍| 欧美在线观看一区| 这里只有精品丝袜| 亚洲国内自拍| 韩国自拍一区| 国产午夜精品一区二区三区视频| 亚洲欧美激情四射在线日 | 欧美日本一区二区三区| 日韩视频永久免费观看| 亚洲第一精品久久忘忧草社区| 久久这里只精品最新地址| 国产一区二区三区的电影 | 国产精品永久免费观看| 午夜精品理论片| 亚洲性夜色噜噜噜7777| 亚洲男人的天堂在线aⅴ视频| 久久国产精品久久久久久| 一区二区三区黄色| 亚洲激情婷婷| 亚洲欧美日韩在线一区| 一本一本大道香蕉久在线精品| 影音先锋久久| 亚洲国产精品成人综合色在线婷婷| 国产日韩欧美亚洲一区| 国产精品日日摸夜夜摸av| 国产精品美女久久久久久久| 欧美亚州韩日在线看免费版国语版| 欧美日韩亚洲一区三区| 亚洲视频在线观看| 久久精品夜色噜噜亚洲a∨| 欧美黑人一区二区三区| 午夜一级久久| 国产亚洲在线| 欧美激情国产精品| 亚洲欧美日韩在线高清直播| 久久综合狠狠| 一本综合精品| 91久久在线视频| 国产视频欧美视频| 欧美成人免费一级人片100| 亚洲精品日韩一| 老司机久久99久久精品播放免费 | 欧美一区二区三区啪啪| 欧美日韩在线一区二区三区| 午夜日韩av| 亚洲美女尤物影院| 亚洲经典在线| 在线视频亚洲欧美| 欧美高清在线一区| 最新国产の精品合集bt伙计| 另类天堂视频在线观看| 欧美在线日韩在线| 欧美在线一区二区| 亚洲福利视频二区| 国产欧美一区二区白浆黑人| 最新高清无码专区| 老司机精品视频一区二区三区| 亚洲欧美久久久| 午夜精品一区二区三区电影天堂| 亚洲精品乱码久久久久久蜜桃91 | 欧美中文字幕第一页| 亚洲精品一区二区三区福利 | 亚洲网站在线播放| 国产精品久久久久久久第一福利| 亚洲一区二区3| 久久久av水蜜桃| 亚洲人线精品午夜| 欧美午夜精品久久久久久孕妇| 在线视频日本亚洲性| 欧美在线视频免费观看| 好吊色欧美一区二区三区视频| 美女主播一区| 一区二区三区免费观看| 久久久久五月天| 亚洲欧洲精品一区二区| 国产精品国产三级国产aⅴ9色| 欧美制服第一页| aaa亚洲精品一二三区| 久久精品国产99精品国产亚洲性色 | 亚洲一区免费网站| 久久久精彩视频| 99re6热只有精品免费观看 | 久久亚洲综合色一区二区三区| 亚洲美女91| 久久综合九色欧美综合狠狠| 国产精品99久久久久久白浆小说| 国产亚洲精品激情久久| 欧美国产高清| 久久久www| 亚洲午夜高清视频| 亚洲大片免费看| 午夜在线a亚洲v天堂网2018| aa成人免费视频| 狠狠干狠狠久久| 国产精品免费看| 欧美不卡在线视频| 久久大逼视频| 亚洲自拍偷拍麻豆| 亚洲欧洲精品一区二区| 久久中文精品| 久久精品99国产精品日本| 99在线精品观看| 亚洲人成人一区二区在线观看| 国产欧美日本| 国产精品中文在线| 国产精品免费一区二区三区观看| 欧美成人黑人xx视频免费观看| 久久超碰97人人做人人爱| 国产精品99久久久久久久女警| 亚洲国产成人在线视频| 亚洲第一成人在线| 欧美激情一区二区在线| 免费成人你懂的| 另类av导航| 欧美肥婆bbw| 欧美成在线观看| 欧美成人午夜| 欧美国产日韩精品| 欧美激情一二三区| 亚洲电影免费观看高清完整版在线观看| 久久免费精品视频| 久久精品亚洲一区| 久久久久久电影| 女生裸体视频一区二区三区| 免费在线观看日韩欧美| 欧美成人国产| 亚洲日韩第九十九页| 亚洲精品视频中文字幕| 亚洲色图在线视频| 亚洲欧美清纯在线制服| 欧美亚洲视频| 久久久亚洲精品一区二区三区| 久久天堂av综合合色| 欧美77777| 欧美三级网址| 国产老女人精品毛片久久| 狠色狠色综合久久| 亚洲国产日韩一区二区| 99视频在线精品国自产拍免费观看| 夜夜狂射影院欧美极品| 午夜精品99久久免费| 久久久蜜桃一区二区人| 亚洲成在人线av| 宅男66日本亚洲欧美视频| 欧美一区二区三区的| 欧美~级网站不卡| 国产精品s色| 伊人精品成人久久综合软件| 亚洲精品视频在线看| 亚洲欧美视频在线| 牛夜精品久久久久久久99黑人 | 欧美v国产在线一区二区三区| 亚洲国产欧美不卡在线观看| 亚洲无线视频| 久久永久免费| 国产精品亚洲一区二区三区在线| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲另类在线视频| 久久久99免费视频| 亚洲精品午夜| 久久久久久久综合狠狠综合| 欧美日韩亚洲高清| 激情综合色综合久久综合| 一区二区三区鲁丝不卡| 老司机一区二区| 亚洲午夜激情网页| 女人香蕉久久**毛片精品| 国产性做久久久久久| 一区二区不卡在线视频 午夜欧美不卡' | 久久av一区二区| 亚洲欧美在线一区| 久久精品国产一区二区三| 欧美日韩国产成人在线91| 亚洲电影在线看| 香蕉久久夜色精品国产| 91久久中文字幕| 久久资源在线|