該系列博文主要參考自 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