【发布时间】:2019-04-27 07:30:54
【问题描述】:
可以比较两个 typeid() 结果的结果吗? cppreference 有关于这个操作符的注释:
不保证相同的 std::type_info 实例将 由 typeid 表达式的所有求值引用 类型,尽管那些 type_info 对象的 std::type_info::hash_code 将是相同的,它们的 std::type_index 也是如此。
const std::type_info& ti1 = typeid(A);
const std::type_info& ti2 = typeid(A);
assert(&ti1 == &ti2); // not guaranteed
assert(ti1.hash_code() == ti2.hash_code()); // guaranteed
assert(std::type_index(ti1) == std::type_index(ti2)); // guaranteed
我的理解是返回是对 type_info 类型的静态 L 值的引用。这就是说 &ti1 == &ti2 对于相同的类型不能保证是相同的。相反,它说使用哈希码或 std::type_index 类。但是它没有提到是否直接比较类型:
ti1 == ti2;
保证为真。我以前用过这个,文档是否暗示这是有保证的?
【问题讨论】:
-
你以前直接比较过它们吗?他们的规范不包括
operator==。如果您的目标是便携性,最好不要这样做。 -
@StoryTeller 哪个规范不包括
operator==? -
@StoryTeller 我可能会误解你,但肯定有operator ==。
-
@Jodocus - 真的吗?我是否混淆了
type_index与难以忍受的before成员合作的必要性? -
@StoryTeller 我认为在检查类型标识时没有直接需要
before。