标准是否规定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 名称应该是唯一的无论如何键入该实现,对吗?
答案 0 :(得分:6)
name
上的type_info
函数无法保证有用。一个实现可能会为所有内容返回""
并且符合要求。在实践中,它并不总是""
,它可以用于调试,但只能用于调试。
但是,type_info
==
和before
以及hash_code
不依赖于name
。
type_index
是指向type_info
的指针的包装器,它使用info的方法生成Regular类型(可以复制,存储等)。它对于不同的类型是不同的。