type_info 類別描述編譯程式在程式內產生的類型資訊。 這個類別的物件會實際儲存類型的名稱指標。 type_info類別也會儲存一個編碼的值,適合比較兩個類型是否相等或定序順序。 類型的編碼規則和排序法則不會指定,而且在不同的程式之間也會有所差異。
<typeinfo>頭文件必須包含,才能使用 type_info 類別。
type_info 類別的介面為:
class type_info {
public:
type_info(const type_info& rhs) = delete; // cannot be copied
virtual ~type_info();
size_t hash_code() const;
_CRTIMP_PURE bool operator==(const type_info& rhs) const;
type_info& operator=(const type_info& rhs) = delete; // cannot be copied
_CRTIMP_PURE bool operator!=(const type_info& rhs) const;
_CRTIMP_PURE int before(const type_info& rhs) const;
size_t hash_code() const noexcept;
_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 類似於位址運算符 (&) 。
成員 type_info::name 函式會將 const char* 傳回為 Null 終止的字串,此字串代表型別的人類可讀取名稱。 所指向的記憶體會加以快取,且絕不可直接取消配置。
成員 type_info::raw_name 函式Microsoft特定。 它會將 傳 const char* 回為 Null 終止的字串,表示物件型別的裝飾名稱。 名稱會以裝飾形式儲存,以節省空間。 因此,此函式的速度會比 type_info::name 它不需要取消取消編碼名稱還要快。 函式傳回的 type_info::raw_name 字串在比較作業中很有用,但無法讀取。 如果您需要人類可讀取的字串,請改用 type_info::name 。
只有在指定了 /GR (啟用運行時間類型資訊) 編譯程式選項時,才會產生多型類別的類型資訊。