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