【发布时间】:2013-05-06 10:01:51
【问题描述】:
我使用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
我猜“A”之前的“1”是空基类优化的结果,但是“m”代表什么,这正常吗?
我正在使用以下 gcc 版本:g++ (Ubuntu 4.4.3-4ubuntu5.1) 4.4.3
【问题讨论】:
-
type_info::name返回的名称是实现定义的。 Gcc 为size_type选择了m。打败我:) -
@jrok 啊,那好吧。 :)
-
您可能需要检查
std::type_info::name函数的引用。 -
@JoachimPileborg 我做到了,但我想我期待更好的东西,而不仅仅是一个“m”字符。 :)
-
“A”前面的“1”是因为这是名称
A的长度。