14

我曾经使用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;

};

我得到了这个作为输出:

m
1A

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

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

4

2 回答 2

18

G++ 对这些类型使用实现定义的命名,但它也提供了c++filt使它们易于阅读的实用程序:

$ ./test | c++filt -t
unsigned long
A
于 2013-05-06T10:29:11.750 回答
0

我在 gcc 上用于检查类型的快速 hack 是一个带有转发引用参数的模板化函数,printing __PRETTY_FUNCTION__

template<typename T>
void PrintType(T&&) {
    cout << __PRETTY_FUNCTION__ << endl;
}

这可能会打印出如下内容:

void PrintType(T&&) [with T = long unsigned int]

于 2022-02-01T20:57:14.710 回答