对于以下代码:
#include
#include
using namespace std;
int
main(int argc, char* argv[])
{
struct
{
struct { }
a;
struct { int x; } b;
} obj;
cout <<
typeid(obj.a).name() << endl;
cout << typeid(obj.b).name()
<< endl;
cout << boolalpha <<
bool(typeid(obj.a)==typeid(obj.b)) << endl;
system( "PAUSE"
);
return
0;
}
输出结果是:
?AU__unnamed@0?1?main@
?AU__unnamed@0?1?main@
true
obj.a和obj.b的类型名称相同勉强可以说得过去,但类型相同就属于Bug了,这个Bug属于非常低级的错误,除非特意犯傻,否则出现这样的错误是不可原谅的。我猜测不出这个Bug产生的任何可能原因,因为对于
obj.a = obj.b
编译器是知道错误的呀!
[2005/10/09日记]:
虽然结果令人不快,但它并非Bug,C++标准并没有对type_info::name()的返回值有任何约定,一个不违反规定的做法就是令所有type_info的name()都返回一个空字符串,当然,目前还没有任何一个编译器厂家敢这样调戏用户^_^。
BTW:typeid的返回类型是type_info的引用,但对于同一种类型的typeid操作返回值地址,C++标准却没有要求她们相同,没有办法,举例如下:
(
&typeid(int) == &typeid(int) )
结果未必是true,应该老实的比较type_info本身,而不是其地址。
阅读(2629) | 评论(14) | 转发(0) |