【发布时间】:2016-04-12 15:27:33
【问题描述】:
使用 C++ (gcc 4.8.3) 我有 2 种类型(T1 和 T2),它们具有 typeid(T1).name() 和 typeid(T2).name() 相同的奇怪属性,但是
std::is_same<T1, T2>::value 是 false。
怎么可能?我如何进一步调查以确定原因可能是什么?
【问题讨论】:
-
typeid忽略顶级限定符。 -
^^ 表示 const 和 &
-
@SergeyA 可能无法保证
typeid会给您相同std::type_info对象,但它是保证所有@从typeid(T)返回的 987654330@ 对象对于相同的T比较相等。根据 C++14 18.7.1/3,如果两个操作数描述相同的类型,std::type_info::operator==将返回true。 -
@SergeyA:我认为这是对标准的恶意解读。 [type.info]/1 说“适合比较两种类型是否相等”,我认为这几乎可以排除愚蠢的事情,比如总是返回
true。 -
为什么需要
hash_code进行比较?似乎更合理的是引入hash_code以允许将 typeid 粘贴到无序容器中。另外,不要将 name 与 typeid 结果的值混淆。没有人声称 names 具有所需的属性(您肯定不想散列名称)。