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

qua*_*ant 8 c++ c++11

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

返回包含类型名称的实现定义的以null结尾的字符串.不给出任何保证,特别是返回的字符串对于几种类型可以是相同的,并且在相同程序的调用之间改变.

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

这使我相信,也许是错位的名称/ typeids是不是一定是唯一的.然而,该页面std::type_index专门用于假设这些类型在其" 使用示例 "中是唯一的.

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

Demangling是不是一种选择,因为它是非常大的类型太慢了,但我的猜测是,如果实现提供了一个工具来还原函数的名称,然后将错位的名称应该是该类型在实施独特的,无论如何,正确吗?

Yak*_*ont 6

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

然而,type_info ==beforehash_code不依赖name.

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