在编写程序中,有时候需要判断两个对象是不是同一个类型,就需要用到typeid,通常有些人喜欢用type( obj ).name()去进行字符串的比较,这种比较方式的开销是比较大的。在此,尽量使用hash_code()去进行比较,如下所示。
#include <iostream>
# include <typeinfo>
using namespace std;
class A{};
class B{};
int main(int argc, char** argv)
{
cout << "sizeof(A)::" << sizeof(A)<<endl;
cout << "sizeof(B)::" << sizeof(B) << endl;
A a;
B b;
cout << typeid(a).name() << endl; //
cout << typeid(b).name() << endl; //
A c;
bool a_b= (typeid(a).hash_code() == typeid(b).hash_code());
bool a_c = (typeid(a).hash_code() == typeid(c).hash_code());
cout << "Are they consistent?" << endl;
cout << "A and B:" << (int)a_b << endl; // 0
cout << "A and C:" << (int)a_c << endl; // 1
return 0;
}
A和B是空的,系统会为class A和class B插入1字节。运行结果如下: