[英]What's the lifetime of the object returned by typeid operator?
如果我调用typeid
并检索返回的type_info
的地址:
const type_info* info = &( typeid( Something ) );
typeid
返回的 object 的生命周期是多少,指向该 object 的指针将保持多长时间有效?
无论实现如何实现它们, typeid
表达式的结果都是左值,并且这些左值引用的对象的生命周期必须持续到程序结束。
来自 ISO/IEC 14882:2003 5.2.8 [expr.typeid]:
typeid
表达式的结果是一个左值 [...] 左值引用的 object 的生命周期延伸到程序的末尾。
从 C++ 2003 标准的 5.2.8.1 开始:
typeid 表达式的结果是 static 类型 const std::type_info (18.5.1) 和动态类型 const std::type_info 或 const name 的左值,其中 name 是实现定义的 class 派生自 std::type_info 18.5.1.61 中描述的行为)左值引用的 object 的生命周期延长到程序的末尾。 未指定在程序末尾是否为 type_info object 调用析构函数。
它的生命周期是程序的持续时间。 而且无论你写多少次typeid(x)
,它每次都会返回相同的type_info
object ,对于相同的类型。
那是,
T x, y;
const type_info & xinfo = typeid(x);
const type_info & yinfo = typeid(y);
引用xinfo
和yinfo
都引用相同的 object。 所以尝试打印地址来验证它:
cout << &xinfo << endl; //printing the address
cout << &yinfo << endl; //printing the address
Output:
0x80489c0
0x80489c0
注意:对于您的运行,地址可能与上述不同,但无论是什么,都将是相同的!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.