Chap2-构造函数语意学
生活随笔
收集整理的這篇文章主要介紹了
Chap2-构造函数语意学
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如果一個類沒有任何constructor,那么會有一個default constructor被隱式的聲明出來,一個implicit default constructor將是一個trivial(無用的)constructor。但是在某些情況下,implicit default constructor將是一個nontrivial constructor,下面一一討論:
由編譯器合成nontrivial default constructor的四種情況:
1)帶有default constructor 的 member class object(ps:不包括基本數據類型對象):
- case 1:如果一個類沒有任何constructors,但它包含一個member class object,那么這個類的implicit default constructor 會去調用member class object的default constructor。
- case 2:如果一個類包含constructors(ps:不限定是default constructor),也包含帶default constructor的member class object,但是沒有在constructors中顯示調用,那么編譯器會擴張已存在的constructors,使其每個member class object得到初始化。
- case 3:C++中以member class object 在類中的聲明順序來調用各個constructors。
2)帶有default constructor 的 base class:
- case 1:如果一個類沒有任何constructors,但它派生自一個或多個帶有default constructor 的 base class,那么這個類的implicit default constructor 會去調用base class 的 default constructor(按聲明順序調用)。
- case 2:如果一個類包含constructors(ps:不限定是default constructor),且派生自一個或多個帶有default constructor 的 base class,但是沒有在constructors中顯示調用,那么編譯器會擴張已存在的constructors,使其每個上層base class 的 default constructor 得到調用(按聲明順序調用)。
3)帶有一個或多個virtual functions 的 class:
- class聲明(或繼承)一個或多個virtual functions,那么編譯器會在constructors(如果沒有,則隱式創建一個default constructor)中隱式的進行一些擴張行動:創建一個virtual function table,內放class 的 virtual functions的地址(所以一個類中如果聲明了virtual function(純虛函數除外),就必須實現它,實現了才會有函數地址);在每一個class object中,創建一個額外的vft_ptr,內含virtual function table的地址。
4)帶有一個或多個virtual base class 的 class:
- class或繼承一個或多個virtual base class,那么編譯器會在constructors(如果沒有,則隱式創建一個default constructor)中隱式的進行一些擴張行動:創建一個virtual base class table,內放virtual base class subobjects 的地址(所以要virtual派生自一個base class,那么這個base class必須提供default constructor,使得編譯器能創建virtual base class 的 subobject);在每一個class object中,創建一個額外的vbt_ptr,內含virtual base class table的地址。
總結:以上四種情況,會造成編譯器為未聲明constructor的類隱式生成一個default constructor,或者擴張已有的constructors使其滿足編譯器的需要。
轉載于:https://www.cnblogs.com/newhand-liu/archive/2012/05/26/2793274.html
總結
以上是生活随笔為你收集整理的Chap2-构造函数语意学的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抓狂
- 下一篇: cad立体图怎么旋转看图_CAD趣事之对