比较两个typeid()结果的结果是否可以? cppreference关于此运算符的注意事项:


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;

保证是真实的。我以前用过,文档是否暗含了保证?

最佳答案

std::type_info 是类类型,这意味着ti1 == ti2表达式将触发重载的operator==。其行为由[type.info]/p2描述:

10-08 11:38