int* a = nullptr;
const int* b = nullptr;
int * const c = nullptr;
const int* const d = nullptr;
std::cout << typeid(a).name() << std::endl;
std::cout << typeid(b).name() << std::endl;
std::cout << typeid(c).name() << std::endl;
std::cout << typeid(d).name() << std::endl;
return 0;
结果如下:
int * __ptr64
int const * __ptr64
int * __ptr64
int const * __ptr64
使用teypid对变量进行类型读取,从结果上看,typeid不能取得变量的顶层const属性。
文档中也记载了,typeid会忽略顶层const属性,也就是 typeid(T) = typeid(const T),则typeid引用则指向引用指向的类型。
typeid使用在类构造或者析构函数中,则只表示当前类,不能进行多态类型的判定。
另外使用typeid时,要包含头文件,否则程序会被谬构。
typeid只有在虚表查找时才会有运行时开销,否则都是在编译阶段完成。