typeid运算符的奇怪行为?

时间:2011-01-10 00:00:01

标签: c++ xcode typeid

使用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

2 个答案:

答案 0 :(得分:7)

name()结构的type_info成员函数是特定于实现的。无法保证它会尝试返回与原始程序中的内容相匹配的内容。实际上,C ++ ISO标准(18.5.1.7)实际上表示该函数返回“实现定义的NTBS”(以空值终止的字节串)。如果它想要的话,它可能总是返回字符串“neener neerer我不会告诉你这种类型的名字。”这与Java的Class<?>类型形成对比,后者对可以和不能返回的内容有非常严格的限制。

答案 1 :(得分:4)

发生的事情并不特别。只是typeid不承诺返回该类型的“原始”名称,而只是一个名称。

该函数返回一个实现定义的字符串,如果幸运的话,该字符串是可识别的,但它没有做出承诺。