使用XCode 3.2.3(64位),我得到以下奇怪的输出。我究竟做错了什么?
#include <iostream>
#include <typeinfo>
struct student {
};
int main()
{
int i;
student obj;
std::cout << typeid(i).name() << "\n";
std::cout << typeid(obj).name() << "\n";
return 0;
}
输出:
i
7student
答案 0 :(得分:7)
name()
结构的type_info
成员函数是特定于实现的。无法保证它会尝试返回与原始程序中的内容相匹配的内容。实际上,C ++ ISO标准(18.5.1.7)实际上表示该函数返回“实现定义的NTBS”(以空值终止的字节串)。如果它想要的话,它可能总是返回字符串“neener neerer我不会告诉你这种类型的名字。”这与Java的Class<?>
类型形成对比,后者对可以和不能返回的内容有非常严格的限制。
答案 1 :(得分:4)
发生的事情并不特别。只是typeid
不承诺返回该类型的“原始”名称,而只是一个名称。
该函数返回一个实现定义的字符串,如果幸运的话,该字符串是可识别的,但它没有做出承诺。