一、rtti概述
rtti的功能由兩個運算子實現,乙個是typeid,用來返回表示式的型別;另乙個是dynamic_cast,作用是將基類的指標或引用安全地轉為子類的指標或引用
二、typeid
typeid的表示式形式是typeid(e),e可以是任意表示式或者型別,typeid的結果是個const物件的引用,該物件的型別是標準庫type_info或type_info的子類,type_info類中有個name成員函式,返回值是個表示型別名字的字串,所以typeid的結果可通過name方法檢視型別名字
當乙個物件中沒有虛函式時,typeid得到的時運算物件的靜態型別,如果有虛函式,那麼,typeid得到的時運算物件的動態型別
示例
class base
這種從子類向基類的轉換或者是平轉的情況,用不用dynamic_cast的效果都一樣
示例2:e的型別是type的子類,基類的指標指向子類物件
int main(int argc, char const *ar**)
上述**中,因為基類base不是多型類(沒有虛函式),因此無法找到執行是資訊進行執行時型別檢查,所以,此時即使基類指標指向子類物件,也無法進行dynamic_cast,**無法通過編譯,
將base的析構函式設定為virtual後,**可以通過編譯,執行後,呼叫子類中的func
示例3:e的型別是type的子類,基類的指標指向基類物件
int main(int argc, char const *ar**)
else
catch(bad_cast) {
cout<
參考《c++ primer》
C 執行時型別識別(RTTI)
執行時型別識別rtti 即run time type identification 主要通過typeid和dynamic cast來實現 typeid操作符 type info實現如下 class type info 應用如下 typeid obj name 列印出指標obj指向的實際的物件型別if...
執行時型別識別(RTTI)
執行時型別識別 rtti 即是程式執行過程中知道某個物件屬於某個類,我們平時用c 程式設計接觸的rtti一般是編譯器的rtti,即是在新版本的vc 編譯器裡面選用 使能rtti 然後載入typeinfo.h檔案,就可以使用乙個叫typeid 的運運算元,它的地位與在c 程式設計中的sizeof 運運...
執行時型別資訊RTTI
我們在寫c 的時候經常碰到使用dynamic cast進行型別轉換的情況,也都知道經過dynamic cast的轉換更加安全,因為dynamic cast進行了型別檢查。但是可能很多人不知道dynamic cast是c 執行時型別資訊 rtti 機制鏈條上的乙個節點。rtti提供了兩個操作符和乙個類...