程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 第18章 特殊工具與技術(7)

第18章 特殊工具與技術(7)

編輯:C++入門知識

18.2.2 typeid操作符

如果表達式的類型是類類型且該類包含一個或多個虛函數,則表達式的動態類型可能不同於它的靜態編譯時類型。例如,如果表達式對基類指針解引用,則該表達式的靜態編譯時類型是基類類型;但是指針實際指向派生類對象,則typeid操作符將說表達式的類型是派生類型。

typeid操作符可以與任何類型的表達式一起使用。內置類型的表達式以及常量都可以用作typeid操作符的操作數。如果操作數不是類類型或者是沒有虛函數的類,則typeid操作符指出操作數的靜態類型;如果操作數是定義了至少一個虛函數的類類型,則在運行時計算類型。

使用typeid操作符

typeid最常見的用於是比較兩個表達式的類型,或者將表達式的類型與特定類型相比較。


Base1 *bp=new Base1(); 
Child1 *cp=new Child1(); 
 
if(typeid(*bp)==typeid(*cp)){ 

if(typeid(*cp)==typeid(Child1)){ 

 Base1 *bp=new Base1();
 Child1 *cp=new Child1();

 if(typeid(*bp)==typeid(*cp)){
 }
 if(typeid(*cp)==typeid(Child1)){
 }只有當typeid的操作數是帶虛函數的類類型的對象的時候,才返回動態類型信息。測試指針(相對於指針指向的對象)返回指針的靜態的、編譯時類型。

如果指針p的值是0,那麼,如果p的類型是帶虛函數的類型,則typeid(*p)拋出一個bad_typeid異常;如果p的類型沒有定義任何虛函數,則結果與p的值是不相關的。

 

摘自 xufei96的專欄

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved