C++ 提供的 <typeinfo> 這個頭文件保存了一些類型,這些類型和 typeid, dynamic_cast 操作符相關。
1. std::type_info 這個類型在 <typeinfo> 中定義。 typeid 操作符會返回一個該類型的 const 左值對象。但是這個 std::type_info 把拷貝構造函數設置成 private 的了,因此不能直接獲取 std::type_info 對象。 std::type_info 這個類型主要提供了 operator==, operator!= 運算符和name()方法,name()方法會返回一個指示該類型的字符串。可以看出來,這個typeid主要是為了對比兩個對象是否從屬於一個類。
typeid 的主要用法:
1 class Person; 2 Person Potter; 3 if (typeid(Person) == typeid(Potter)) 4 cout << "Equal" << endl;
采用了 const 標識不影響類型,使用 typedef 定義的類型別名也不影響類型。
2. typeof 和 typeid 不同,typeid 是 c++ 提供的,而 typeof 是編譯器提供的(一般指gcc)。有人說 typeof 和 C++11 提供的關鍵字 decltype 類似。
(未完待續。。。)