std :: typeid :: name()的奇怪输出

tma*_*ric 8 c++ typeinfo

我曾经使用typeid以下代码(cppreference)获取std :: vector :: size_type的类型名称和零大小的类A.

#include<iostream>
#include <vector>
#include <typeinfo>

using namespace std;

class A {};

int main()
{
    vector<int> v(10); 

    vector<int>::size_type s = v.size(); 

    A a; 

    cout << typeid(s).name() << endl;
    cout << typeid(a).name() << endl;

};
Run Code Online (Sandbox Code Playgroud)

我把它作为输出:

m
1A
Run Code Online (Sandbox Code Playgroud)

我猜"A"之前的"1"是空基类优化的结果,但"m"代表什么,这是正常的吗?

我使用以下gcc版本:g ++(Ubuntu 4.4.3-4ubuntu5.1)4.4.3

Cub*_*bbi 12

G ++为类型使用实现定义的命名,但它也提供了c++filt使它们可读的实用程序:

$ ./test | c++filt -t
unsigned long
A
Run Code Online (Sandbox Code Playgroud)

  • @ tomislav-maric是的,`/ usr/bin/g ++`和`/ usr/bin/c ++ filt`是同一编译器实现的一部分. (2认同)