C++運轉時獲得類型信息的type_info類與bad_typeid異常。本站提示廣大學習愛好者:(C++運轉時獲得類型信息的type_info類與bad_typeid異常)文章只能為提供參考,不一定能成為您想要的結果。以下是C++運轉時獲得類型信息的type_info類與bad_typeid異常正文
type_info 類
type_info 類描寫編譯器在法式中生成的類型信息。此類的對象可以有用存儲指向類型的稱號的指針。 type_info 類還可存儲合適比擬兩個類型能否相等或比擬其分列次序的編碼值。類型的編碼規矩和分列次序是未指定的,而且能夠因法式而異。
必需包括 <typeinfo> 標頭文件能力應用 type_info 類。 type_info 類的接口是:
class type_info { public: virtual ~type_info(); size_t hash_code() const _CRTIMP_PURE bool operator==(const type_info& rhs) const; _CRTIMP_PURE bool operator!=(const type_info& rhs) const; _CRTIMP_PURE int before(const type_info& rhs) const; _CRTIMP_PURE const char* name() const; _CRTIMP_PURE const char* raw_name() const; };
您不克不及直接實例化 type_info 類的對象,由於該類只要一個公有復制結構函數。結構(暫時)type_info 對象的獨一方法是應用 typeid 運算符。因為賦值運算符也是公有的,是以不克不及復制或分派類 type_info 的對象。
type_info::hash_code 可界說合適將 typeinfo 類型的值映照到索引值的散布的哈希函數。
運算符 == 和 != 分離用於與其他 type_info 對象比擬能否相等和不相等。
類型的分列次序與繼續關系之間沒有聯系關系。應用 type_info::before 成員函數可肯定類型的排序次序。不克不及包管 type_info::before 在分歧的法式中(乃至是屢次運轉統一法式時)會發生雷同的成果。如許,type_info::before 相似於 address-of (&) 運算符。
type_info::name 成員函數可將 const char* 前往到以 null 開頭的字符串,該字符串表現類型的用戶可讀稱號。將緩存所指向的內存,應當從不直接釋放它。
type_info::raw_name 成員函數可將 const char* 前往到以 null 開頭的字符串,該字符串表現對象類型的潤飾稱號。該稱號現實上以其潤飾的情勢存儲以節儉空間。是以,此函數比 type_info::name 更快,由於它不須要撤消潤飾稱號。 type_info::raw_name 函數前往的字符串在比擬運算符中很有效,但它弗成讀。假如您須要用戶可讀的字符串,請改用 type_info::name 函數。
bad_typeid 異常
當 typeid 的操作數是 Null 指針時,typeid 運算符將激發 bad_typeid 異常。
語法
catch (bad_typeid) statement
備注
bad_typeid 的接口為:
class bad_typeid : public exception { public: bad_typeid(const char * _Message = "bad typeid"); bad_typeid(const bad_typeid &); virtual ~bad_typeid(); };
以下示例演示激發 bad_typeid 異常的 typeid 運算符。
// expre_bad_typeid.cpp // compile with: /EHsc /GR #include <typeinfo.h> #include <iostream> class A{ public: // object for class needs vtable // for RTTI virtual ~A(); }; using namespace std; int main() { A* a = NULL; try { cout << typeid(*a).name() << endl; // Error condition } catch (bad_typeid){ cout << "Object is NULL" << endl; } }
輸入
Object is NULL