Странный вывод std :: typeid :: name ()

я использовал typeid получить имена типов std :: vector :: size_type и класса A нулевого размера со следующим кодом (cppreference):

#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;

};

И я получил это в качестве вывода:

m
1A

Я предполагаю, что «1» перед «A» является результатом оптимизации пустого базового класса, но что означает «m» и это нормально?

Я использую следующую версию gcc: g ++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3

8

Решение

G ++ использует определяемые реализацией именования для типов, но также предлагает утилиту c++filt сделать их удобочитаемыми

$ ./test | c++filt -t
unsigned long
A
12

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]