如果我拨打typeid
并检索返回的type_info
地址:
const type_info* info = &( typeid( Something ) );
typeid
返回的对象的生命周期是什么,指向该对象的指针有效期是多久?
答案 0 :(得分:10)
然而,实现实现了它们,typeid
表达式的结果是左值,并且这些左值引用的对象的生命周期必须持续到程序结束。
来自ISO / IEC 14882:2003 5.2.8 [expr.typeid]:
typeid
表达式的结果是左值[...]左值引用的对象的生命周期延伸到程序的末尾。
答案 1 :(得分:5)
来自C ++ 2003标准的5.2.8.1:
typeid表达式的结果是静态类型const的左值 std :: type_info(18.5.1)和动态类型const std :: type_info或const name其中name是派生自的实现定义的类 std :: type_info保留18.5.1.61中描述的行为 左值引用的对象的生命周期延伸到 程序结束 。是否要求析构函数 未指定程序末尾的type_info对象。
答案 2 :(得分:2)
它的生命周期是程序的持续时间。无论你写多少次typeid(x)
,它每次都会返回相同类型的type_info
对象。
即,
T x, y;
const type_info & xinfo = typeid(x);
const type_info & yinfo = typeid(y);
引用xinfo
和yinfo
都引用同一个对象。因此,请尝试打印地址以进行验证:
cout << &xinfo << endl; //printing the address
cout << &yinfo << endl; //printing the address
输出:
0x80489c0
0x80489c0
注意:对于你的跑步,地址可能与上面的不同,但无论它是什么,它都是一样的!