0

可能重复:
typeid() 在 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)

4

1 回答 1

0

typeid function can get variable's type infomation in C++

的确如此,但是当您调用该type_info::name()函数时,您会为每种不同的类型获得一个唯一的名称,但标准并不能保证该名称具有一定的意义。而且它也依赖于实现。

您在实践中得到的(至少对于大多数/所有实现而言)是该类型的错位名称。

简而言之,您type_info::name()只能用于比较或调试(您必须自己对名称进行解密才能获得有意义的东西)

编辑 由于您使用 gcc,您可能需要查看此页面: http: //gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html

于 2012-12-01T17:36:44.503 回答