2011-01-10 94 views
3

使用XCode 3.2.3(64位),我得到以下奇怪的输出。我究竟做错了什么?typeid运算符的奇怪行为?

#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

你说这是错的 - 你期望看到什么? – Mark 2011-01-10 00:04:29

回答

4

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

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

7

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