2011-01-10 140 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<?>類型形成了鮮明的對比,該類型對可以和不可以返回的內容有非常嚴格的限制。