<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 何克勤 閱讀(162) 評論(0)  編輯  收藏 所屬分類: C/C++
    主站蜘蛛池模板: 国产国产人免费人成免费视频 | 久久亚洲精品11p| 欧洲乱码伦视频免费| 久久精品国产亚洲AV电影| 3d成人免费动漫在线观看| 亚洲图片校园春色| 黄瓜视频影院在线观看免费| 亚洲a视频在线观看| 啦啦啦中文在线观看电视剧免费版 | 亚洲国产精品网站在线播放| 色吊丝永久在线观看最新免费| 亚洲精品无码永久在线观看男男| 日本黄页网站免费| 午夜在线免费视频| 国产亚洲精品久久久久秋霞| a级毛片免费全部播放| 日本亚洲视频在线| 1000部拍拍拍18勿入免费凤凰福利| 亚洲综合小说久久另类区| 4hu四虎最新免费地址| 亚洲av永久无码精品网址| 一本久到久久亚洲综合| 免费看一区二区三区四区| 亚洲午夜视频在线观看| 好吊妞视频免费视频| 永久免费观看黄网站| 久久综合亚洲色HEZYO社区 | 黄色成人免费网站| 亚洲av中文无码字幕色不卡| 2048亚洲精品国产| 91香蕉成人免费网站| 深夜A级毛片视频免费| 亚洲av无码片在线播放| 免费无码AV电影在线观看| 一级毛片免费播放男男| 亚洲自偷自拍另类图片二区| 国产成人免费a在线资源| 你懂的在线免费观看| 亚洲老熟女五十路老熟女bbw| 亚洲愉拍99热成人精品热久久| 99久久国产热无码精品免费|