如何确定std :: type_index对于我的编译器是否唯一?

时间:2014-11-07 05:52:27

标签: c++ c++11

标准是否规定std::type_index(typeid(obj))的调用对该类型是唯一的?我无法找到相关信息。从type_info::name()我得到了这个:

  

返回一个实现定义的以null结尾的字符串   包含类型的名称。不给予任何保证   特别是,返回的字符串对于几种类型可以是相同的   在同一程序的调用之间进行更改。

(来源:http://en.cppreference.com/w/cpp/types/type_info/name

这让我相信,错位的名字/类型可能必然是唯一的。然而,std::type_index的页面专门使用假设,这些类型在其" usage example"中是唯一的。

那么我怎么知道我的编译器的typeid是否唯一,以及碰撞的可能性是多少?此外,有什么方法可以获得某种我们可以知道的类型的唯一标识符(无论是字符串还是其他)?

Demangling不是一个选项,因为它对于非常大的类型来说太慢了,但我的猜测是,如果实现提供了一个解码名称的工具,那么 mangled 名称应该是唯一的无论如何键入该实现,对吗?

1 个答案:

答案 0 :(得分:6)

name上的type_info函数无法保证有用。一个实现可能会为所有内容返回""并且符合要求。在实践中,它并不总是"",它可以用于调试,但只能用于调试。

但是,type_info ==before以及hash_code不依赖于name

type_index是指向type_info的指针的包装器,它使用info的方法生成Regular类型(可以复制,存储等)。它对于不同的类型是不同的。