天天看點

C++标準庫 Utilities library typeinfo

該系列博文主要參考自 cppreference.com 和 cplusplus.com

由于部落客水準有限,内容僅供參考

typeinfo 該頭檔案下有三個class,分别是type_info, bad_cast 和 bad_typeid。type_info為操作符typeid的傳回類型,bad_cast和bad_typeid均為exception類型。

namespace std {
    class type_info;
    class bad_cast;
    class bad_typeid;
}
           

先來介紹type_info,要講type_info不得不先來說說操作符typeid。它用于獲得value或type的類型,它的使用方法與sizeof類似,都是作用于value或type,sizeof的結果為size_t類型,而typeid的結果就為type_info類型。

class type_info {
public:
    virtual ~type_info();
    bool operator==(const type_info& rhs) const noexcept;
    bool operator!=(const type_info& rhs) const noexcept;
    bool before(const type_info& rhs) const noexcept;
    size_t hash_code() const noexcept;
    const char* name() const noexcept;
    type_info(const type_info& rhs) = delete; // cannot be copied
    type_info& operator=(const type_info& rhs) = delete; // cannot be copied
};
           

constructor:不允許複制構造

deconstructor:派生對象通過指向基類的指針安全delete

operator=:不允許指派

operator==/operator!=:判斷是否相等

before:判斷兩個type的順序 (這個順序應該是規定好的,但是沒找到,标準上寫的是 implementation’s collation order)

hash_code(c++11):傳回類型的hash值

name:傳回類型名

其他兩個exception較為簡單

class bad_cast : public exception {
public:
    bad_cast() noexcept;
    bad_cast(const bad_cast&) noexcept;
    bad_cast& operator=(const bad_cast&) noexcept;
    virtual const char* what() const noexcept;
};
           

運作無效的dynamic_cast表達式時将throw bad_cast

class bad_cast : public exception {
public:
    bad_cast() noexcept;
    bad_cast(const bad_cast&) noexcept;
    bad_cast& operator=(const bad_cast&) noexcept;
    virtual const char* what() const noexcept;
};
           

運作無效的typeid表達式時将throw bad_typeid

繼續閱讀