C++標準庫 Utilities library typeinfo

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

由於博主水平有限,內容僅供參考

typeinfo

該頭文件下有三個class,分別是type_info, bad_cast 和 bad_typeidtype_info爲操作符typeid的返回類型,bad_castbad_typeid均爲exception類型。

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


先來介紹type_info要講type_info不得不先來說說操作符typeid。它用於獲得valuetype的類型,它的使用方法與sizeof類似,都是作用於valuetypesizeof的結果爲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的順序 (這個順序應該是規定好的,但是沒找到,標準上寫的是 implementations 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章