type_info 類別

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 (啟用執行時間類型資訊) 編譯器選項時 ,才會產生多型類別的類型資訊。

另請參閱

執行階段類型資訊