在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
返回相同的指针值,还是允许它们返回不同的指针?
答案 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
对象相等。