• <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>

            HyJune的專欄

            Linux From Scratch

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              10 隨筆 :: 11 文章 :: 6 評論 :: 0 Trackbacks
            from:http://ww2w.blog.sohu.com/69144612.html

            1. 在全局域中聲明的變量會自動初始化為0,如:

               double  salary;
               int   day;

            2. 如果變量是在局部域中定義的,或是通過new表達式動態(tài)分配的,
            則系統(tǒng)不會向它提供初始值0,這些對象被認為是未初始化,其值隨機。
            而類對象會通過缺省構造函數(shù)自動初始化

            3. C++支持兩種形式的初始化:
            1:使用賦值操作符的顯示語法形式。如:int ival=1024;
            2: 隱式形式,初始值被放在括號中。如:int ival (1024);

            4. 數(shù)組可以顯示地用一組數(shù)初始化,如:
            const int aray_size=3;
            int ia[aray_size]={0,1,2};

            int a[5] ={0};  則a的各各元素都初始化為0

            如果指定的維數(shù)大于給定的元素的個數(shù),沒有被顯示初始化的元素將置為0。也可以不指定維數(shù)值,如: int ia[]={0,1,2};

            5. 全局變量的初始化
            對于不同編譯單位的全局變量,其初始化的順序沒有任何的保證,因此對不同編譯單位里的全局變量,在它們的初始化順序之間建立依賴性都是不明智的。
                此外也沒辦法捕捉到全局變量初始化拋出的異常,一般來說要減少全局變量的使用,特別是限制那些要求復雜初始化的全局變量。so:
                1,盡量不用全局變量 
                2,用靜態(tài)變量,通過訪問器進行訪問 
            例如:全局變量  
                int   a   =   5;  
                int   b   =   a;  
                如果a,和b定義在同一個文件里,那沒什么問題,結果b等于5.  
                如果a和b定義在不同文件里,就不能保證b也等于5,也就是說不能保證a先初始化.
            事實上,除了在同一個文件定義的全局對象的初始化是按照定義次序來進行的之外,其他全局或靜態(tài)變量之間的初始化次序沒有任何保障。解決這種問題的方法是不直接使用全局變量,而改用一個包裝函數(shù)來訪問,例如  
              int   get_a()  
              {  
                      static   int   a   =   5;  
                      return   a;  
              }  
              int   get_b()  
              {  
                      static   int   b   =   get_a();  
                      return   b;  
              }   
                
                這樣的話,無論get_a和get_b是否定義在同一個文件中,get_b總是能夠返回正確的結果,原因在于,函數(shù)內部的靜態(tài)變量是在第一次訪問的時候來初始化。 
                任何時候,如果在不同的被編譯單元中定義了"非局部靜態(tài)對象",并且這些對象的正確行為依賴于它們被初始化的某一特定順序,就會產生問題.你絕對無法控制 不同被編譯單元中非局部靜態(tài)對象的初始化順序.對于函數(shù)中的靜態(tài)對象(即"局部"靜態(tài)對象)它們在函數(shù)調用過程中初次碰到對象的定義時被初始化..  
                PS:千萬不要寫出和編譯順序相關的程序來。 
             
            關于全局變量的初始化,C語言和C++是有區(qū)別的。      
               在C語言中,只能用常數(shù)對全局變量進行初始化,否則編譯器會報錯。       
               在C++中,如果在一個文件中定義了int a = 5;要在另一個文件中定義int b = a;的話,前面必須對a進行聲明:extern   int   a;否則編譯不通過.、即使是這樣,int b = a;這句話也是分兩步進行的:在編譯階段,編譯器把b當作是未初始化數(shù)據(jù)而將它初始化為0;在執(zhí)行階段,在main被執(zhí)行前有一個全局對象的構造過程, int b = a;被當作是int型對象b的拷貝初始化構造來執(zhí)行。    
               其實,準確地說,在C++中全局對象、變量的初始化是獨立的,如果不是象int a   =   5;這樣的已初始化數(shù)據(jù),那么就是象b這樣的未初始化數(shù)據(jù)。    
               而C++中全局對象、變量的構造函數(shù)調用順序是跟聲明有一定關系的,即在同一個文件中先聲明的先調用。對于不同文件中的全局對象、變量,它們的構造函數(shù)調用順序是未定義的,取決于具體的編譯器。

            posted on 2008-06-17 17:00 martin0501 閱讀(466) 評論(0)  編輯 收藏 引用 所屬分類: 1. C/C++系列
            久久影视综合亚洲| …久久精品99久久香蕉国产| 久久精品国产99国产精偷| 成人国内精品久久久久影院VR | 伊人久久大香线蕉成人| 久久久久久曰本AV免费免费| 欧美va久久久噜噜噜久久| 日韩亚洲欧美久久久www综合网| 久久婷婷五月综合成人D啪| 伊人久久大香线蕉亚洲五月天| 久久精品国产亚洲AV无码麻豆 | 日日噜噜夜夜狠狠久久丁香五月| 日韩精品久久久久久免费| 99久久国产综合精品五月天喷水 | 久久久久久免费视频| 国产精品青草久久久久婷婷| 青青久久精品国产免费看| 97久久超碰国产精品旧版| 欧美一区二区久久精品| 久久99国产精品久久99| 欧洲精品久久久av无码电影| 亚洲国产日韩欧美综合久久| 久久免费视频网站| 97久久久精品综合88久久| 人妻无码精品久久亚瑟影视| 久久99久久成人免费播放| 超级97碰碰碰碰久久久久最新| 亚洲乱码中文字幕久久孕妇黑人| 日本高清无卡码一区二区久久| 久久电影网2021| 久久久久久久久久久久中文字幕| 久久乐国产综合亚洲精品| 久久se这里只有精品| 久久996热精品xxxx| 精品久久久无码中文字幕| 久久综合欧美成人| 国产精品一久久香蕉产线看| 色偷偷偷久久伊人大杳蕉| 久久综合综合久久综合| 精品久久久久久中文字幕人妻最新| 久久婷婷色综合一区二区|