深度探索C++對象模型筆記 —— 第七章

  1. Point< float >* ptr=0;
    程序中什麼都沒發生,因爲一個指向class object的指針,本身並不是一個class object,編譯器不需要知道與該class有關的任何members的數據或object佈局數據,所以將一個“Point的一個float實例”實例化也就沒有必要了
    如果是引用呢,假設const Point< float >&ref = 0; 它真的會實例化一個“Point的float實例”,因爲reference並不是無物的代名詞,0被視爲整數,必須被轉化爲以下類型的一個對象:Point< float >,如果沒有轉換的可能,這個定義就是錯的,將會在編譯時被挑出來
  2. dynamic_cast運算符可以在執行期決定真正的類型,如果downcast時安全的(也就是說base type pointer指向一個derived class object),這個運算符會傳回被適當轉換過的指針,如果downcast不是安全的,這個運算符返回0
  3. virtual table的第一個slot內含type_info object的地址:此type_info object與指針所指的class type有關
  4. 對於dynamic_cast,一個reference不可以像指針那樣“把自己設爲0便代表了no object”,若將一個reference設爲0,會引起一個臨時性對象(擁有被參考到的類型)被產生出來,該臨時對象的初值爲0,這個reference然後被設定爲該臨時對象的一個別名。因此當dynamic_cast作用於reference時,不能提供像指針一樣的true或false,取而代之的是:
    如果reference真正參考到適當的derived class,downcast會被執行而程序可以繼續執行
    如果reference不是真正某一種derived class,會拋出一個bad_cast_exception
  5. typeid運算符傳回一個const reference,類型爲type_info
  6. typeid也適用與內置類型,typeid(double)…;會傳回一個const type_info&,與使用多態類型的差異在於這時候的type_info object是靜態取得,而不是執行期取得
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章