开发者

Strange behaviour of the typeid operator?

Using XCode 3.2.3 (64-bit), I get following strange output. What am I doing wrong?

#include <iostream>
开发者_Python百科#include <typeinfo>

struct student {

};

int main()  
{  
    int i;
    student obj;

    std::cout << typeid(i).name() << "\n";
    std::cout << typeid(obj).name() << "\n";

    return 0;
}

Output:

i  
7student


The name() member function of the type_info struct is implementation-specific. There's no guarantee whatsoever that it will try to return something that matches what it says in the original program. In fact, the C++ ISO standard (18.5.1.7) actually says that this function returns "an implementation-defined NTBS" (null-terminated byte string). If it wanted to, it could have this always return the string "neener neerer I won't tell you the name of this type." This contrasts with Java's Class<?> type, which has very strict restrictions on what it can and cannot return.

If you’d like to convert the name from std::type_info into something more human, readable, check this other question for details.


What's going on is nothing special. Just that typeid doesn't promise to return the "original" name of the type, but just a name.

The function returns an implementation-defined string, which, if you're lucky, is recognizable, but it makes no promise of that.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜