运行时获知变量类型名称,可以使用 typeid(变量).name()
但对于某些编译器只会返回
#include<iostream> #include<typeinfo> #include<cxxabi.h> using namespace std; template<typename type> inline string type_of(type &x) { return abi::__cxa_demangle(typeid(x).name(),0,0,0); }
1 #include<iostream> 2 #include<typeinfo> 3 #include<cxxabi.h> 4 5 using namespace std; 6 7 template<typename type> 8 inline string type_of(type &x) 9 { 10 return abi::__cxa_demangle(typeid(x).name(),0,0,0); 11 } 12 13 unsigned long long a; 14 static short b; 15 __int128 c; 16 17 inline void d(int e,float f) 18 { 19 return; 20 } 21 22 struct node{ 23 char g; 24 char h[100]; 25 signed i; 26 }j[200]; 27 28 int k; 29 int *l=&k; 30 int **m=&l; 31 32 signed main() 33 { 34 register int n;//寄存器变量只能在栈空间中使用 35 cout<<"a: "<<type_of(a)<<endl; 36 cout<<"b: "<<type_of(b)<<endl; 37 cout<<"c: "<<type_of(c)<<endl; 38 cout<<"d: "<<type_of(d)<<endl; 39 cout<<"j: "<<type_of(j)<<endl; 40 cout<<"j[1].g: "<<type_of(j[1].g)<<endl; 41 cout<<"j[100].h: "<<type_of(j[100].h)<<endl; 42 cout<<"j[201].h[101]: "<<type_of(j[201].h[101])<<endl; 43 cout<<"j[201].i: "<<type_of(j[201].i)<<endl; 44 cout<<"k: "<<type_of(k)<<endl; 45 cout<<"l: "<<type_of(l)<<endl; 46 cout<<"m: "<<type_of(m)<<endl; 47 cout<<"n: "<<type_of(n)<<endl; 48 return 0; 49 }