对typeid(T).name()的多次调用是否会返回相同的指针?

时间:2011-04-25 13:00:34

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

在C ++中,我可以使用typeid运算符来检索任何多态类的名称:

const char* name = typeid( CMyClass ).name();

返回的const char* will be available to my program for as long as the corresponding class exists指向的字符串。

typeid(T).name()的多次调用会为同一个class T返回相同的指针值,还是允许它们返回不同的指针?

4 个答案:

答案 0 :(得分:3)

不,他们不需要返回相同的指针。

我在野外系统中也看到过没有 每个DLL都有自己的类型对象副本,其中包含nmae,因此在共享库A中调用typeid(N).name,共享库B将导致不同的指针(尽管是相同的基础字符串)。

答案 1 :(得分:2)

可能,但是如果你想进行比较,为什么要依赖它而不是实际的类型信息呢?

答案 2 :(得分:2)

标准没有说。而BTW,typeid返回的type_info的生命周期是程序的结尾。

答案 3 :(得分:2)

我会说这是实现定义的。标准(基于N3290)关于std::type_info类(第18.7.1节):

const char* name() const noexcept;

Returns: An implementation-defined NTBS.

没有任何措辞我可以发现要求这些指针与描述相同类型的type_info对象相等。