什么是typeid运算符返回的对象的生命周期?

时间:2011-08-11 11:11:20

标签: c++ visual-c++ rtti typeid typeinfo

如果我拨打typeid并检索返回的type_info地址:

const type_info* info = &( typeid( Something ) );

typeid返回的对象的生命周期是什么,指向该对象的指针有效期是多久?

3 个答案:

答案 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);

引用xinfoyinfo都引用同一个对象。因此,请尝试打印地址以进行验证:

 cout << &xinfo << endl; //printing the address
 cout << &yinfo << endl; //printing the address

输出:

0x80489c0
0x80489c0

注意:对于你的跑步,地址可能与上面的不同,但无论它是什么,它都是一样的!

演示:http://www.ideone.com/jO4CO