我从cplusplus.com了解到 typeid 函数可以在C ++中获取变量的类型信息。但结果在我的机器上有点奇怪。
例如:
#include <iostream>
#include <typeinfo>
#include <vector>
using namespace std;
class Test
{
};
int main()
{
vector<int> v;
vector<vector<int> > v2;
Test t;
cout<<"typeid for class Test: "<<typeid(t).name()<<endl;
cout<<"typeid for vector<int>: "<<typeid(v).name()<<endl;
cout<<"typeid for vector<vector<<int> >: "<<typeid(v2).name()<<endl;
return 0;
}
运行此代码后,我机器中的输出为:
typeid for class Test: 4Test
typeid for vector<int>: St6vectorIiSaIiEE
typeid for vector<vector<<int> >: St6vectorIS_IiSaIiEESaIS1_EE
我对“测试”课前的“4”以及矢量周围的奇怪字母感到困惑。谁能给我一些解释?谢谢!
我的操作系统是Fefora 17,g ++(GCC)4.7.0 20120507(Red Hat 4.7.0-5)
答案 0 :(得分:0)
typeid function can get variable's type infomation in C++
这是真的,但是当你调用type_info::name()
函数时,你会得到每个不同类型的唯一名称,但标准并不保证名称有些意义。
它也是依赖于实现的。
您在实践中获得的(至少对于大多数/所有实施而言)是该类型的 mangled 名称。
简而言之,您只能将type_info::name()
用于比较或调试(并且您必须自己解压缩名称才能获得有意义的内容)
修改强> 由于您使用的是gcc,因此您可以查看此页面:http://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html