#include <typeinfo>
/*
* C++并没有规定typeid实现标准,各个编译器可能会不一样
* 有些编译器name()函数会得到可阅读类型字符串,有些不会(如gcc)
* 每种类型的type_info数据长度依赖于类型名称,至少9个字节。GCC中16字节(两个指针:vptr和name指针)
*/
/*
* 可以通过abi::__cxa_demangle获取到可阅读类型字符串
*/
const char *str = "hello";
const type_info &ti = typeid(str);
cout << "str type name: " << ti.name() << endl; // str type name: PKc
#include <cxxabi.h>
int status;
char *realtype = abi::__cxa_demangle(ti.name(), 0, 0, &status);
cout << "str realtype: " << realtype << endl; // str realtype: char const*
free(realtype); // 手动释放