示例出处是Michael Wong的著作《深入理解C++11》代码清单4-16,略有改动。
#include <iostream>
#include <typeinfo>
struct white {};
struct black {};
int main(void)
{
white a;
white c;
black b;
std::cout << typeid(a).name() << std::endl;
std::cout << typeid(b).name() << std::endl;
bool a_b_same = typeid(a).hash_code() == typeid(b).hash_code();
bool a_c_same = typeid(a).hash_code() == typeid(c).hash_code();
std::cout << "a = b ? " << a_b_same << std::endl;
std::cout << "a = c ? " << a_c_same << std::endl;
std::cin.get();
return 0;
}
hash_code返回一个size_t类型,唯一标记了类型的哈希。
name()返回了类型的名称,是一个字符串。
运行结果:
可见,a与c属于同类型,b与a类型不同。
要注意,以上功能执行于运行时 ,而不是编译时,所以会影响程序效率。假如想提高效率,可以使用is_same方法,该方法完成于编译时。