关于C ++中的typeid函数

时间:2012-12-01 16:26:07

标签: c++

  

可能重复:
  typeid() returns extra characters in g++

我从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)

1 个答案:

答案 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