<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 134,comments - 22,trackbacks - 0
    一 Default Constructor 的建構操作
       When is a default constructor synthesized? 當編譯器需要它的時候,也就是 synthesized constructor 只執行編譯器所需的行動,并不執行程序員某些的設想。
       看來以前看C++ Primer 4th時在類的那章相關部分沒有弄懂,P459書上說:
      The compiler generates a default constructor automatically only if a class defines no constructors.只有當一個類沒有定義構造函數時,編譯器才會自動生成一個默認構造函數,但這個不是所說的synthesized default constructor

       常見的兩個誤解
    (1)任何class如果沒有定義default constructor ,就會被編譯器合成一個來。
    (2)編譯器合成的 default constructor 會明確地為每一個 data member 賦初值。
     
       四種 nontrivial default constructor:
    (1)帶default constructor的member class object
       如果一個class沒有任何的constructor,但它內含一個member object,后者有default constructor,則該class的 implicit default constructor 就是 nontrival,編譯器需要為此classsynthesize 出一個 default constructor,不過只有在真正需要被調用時才發生。
       合成的構造,考構,賦值運算符都是以inline方式完成的。
       如果含有多個對象成員,則編譯器按照它們的聲明順序在合成的構造函數中調用它們的default構造函數。

    (2)帶default constructor 的base class
       一個帶有default constructor 的基類派生出一個沒有任何constructor的派生類,則次派生類的default constructor 被視為 nontrival,會被編譯器synthesize出來,其中調用基類的default constructor

    class b{
    public:
        b():i(1024){};
        int i;
    };
    class d:public b{

    };

    如果我們創建d類的對象,則在其default constructor 中會調用b的。

    (3)帶有一個 virtual function的class
       其中有兩種情況 1. class聲明或繼承一個 virtual function。  2. class派生自一個繼承串,其中有至少一個 virtual base class。
       這2種情況中,如果程序員沒有定義自己的constructor,編譯器會 synthesize a default constructor.期間會發生如下事件:1.一個vtbl被產生,內放有class中 virtual function地址。
    2.每一個class object中,一個額外的pointer member(就是vptr)被產生,內含 class vtbl的地址。它們被正確初始化是編譯器的責任。

    (4)帶有一個virtual base class的class
      
    virtual base class的實現因編譯器不同而不同,共通目標是定位(locate)virtual base class在其派生類中的位置。

       以上四種情況,編譯器會為未聲明constructor的class 合成一個default constructor,這在C++標準中稱為 implicit nontrivial default constructor,只是為了滿足編譯器需要。
       這四種情況外的而又沒有聲明default constructor的classes,它們擁有的是
    implicit trivial default constructor,實際上并不會被合成出來。
       s
    ynthesized default constructor 中,只有base class object和member class object會被初始化,其它所有nonstatic build-in類型的成員均不會被初始化,因為編譯器不認為這是必須的工作。
    http://blog.chinaunix.net/u2/72955/showart_2059086.html
    posted on 2009-12-10 15:32 何克勤 閱讀(163) 評論(0)  編輯  收藏 所屬分類: C/C++
    主站蜘蛛池模板: 亚洲一区二区视频在线观看| 大学生高清一级毛片免费| 老司机午夜性生免费福利| 24小时日本在线www免费的| 浮力影院亚洲国产第一页| 无码 免费 国产在线观看91| 免费A级毛片无码A∨免费| 婷婷久久久亚洲欧洲日产国码AV| 免费91麻豆精品国产自产在线观看| 久久综合图区亚洲综合图区| 最好2018中文免费视频| 97无码免费人妻超级碰碰碰碰| 亚洲第一成人在线| 日本一区免费电影| 一区二区三区免费在线视频 | 亚洲av区一区二区三| 亚洲视频一区在线播放| 免费福利在线播放| 久久久久亚洲精品美女| 2021久久精品免费观看| 亚洲精品动漫在线| 毛片免费vip会员在线看| 亚洲乱人伦精品图片| 色欲国产麻豆一精品一AV一免费| 久久精品国产亚洲AV无码娇色| 东北美女野外bbwbbw免费| 亚洲av无码国产精品色在线看不卡| 男人天堂2018亚洲男人天堂| 亚洲精品在线免费观看视频| 亚洲综合一区国产精品| 久久久久国色AV免费看图片| 国产精品手机在线亚洲| 亚洲人成电影亚洲人成9999网| 精品国产一区二区三区免费| 亚洲伊人久久大香线焦| 四虎影视永久免费观看| 久久久久成人精品免费播放动漫| 亚洲日本久久久午夜精品| 国产亚洲成人在线播放va| 91精品免费在线观看| 成年网站免费入口在线观看|