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.
精彩评论