Will相等的type_info地址表示相等的类型

Will equal type_info addresses mean equal types?

本文关键字:表示 类型 地址 type Will info      更新时间:2023-10-16

我正在对识别对象类型的代码进行微优化。我假设我可以使用以下代码来检查在同一个模块中实例化的两个对象是否具有相同的类型:

SomeCommonBase& first = ...;
SomeCommonBase& second = ...;
const type_info& firstInfo = typeid( first );
const type_info& secondInfo = typeid( second );
if( &firstInfo == &secondInfo || firstInfo == secondInfo ) {
   //identical types
} else {
   //different types
}

逻辑是,一旦返回type_info引用,该引用后面的对象就可以保证一直存在,直到模块被卸载。因此,一旦返回了引用,其他对象就不能占用相同的地址。

因此,如果地址匹配,那么它们是相同的type_info对象和相同的数据类型。如果实现为同一类型返回不同的type_info对象,则调用type_info::operator==并进行额外的检查。

这个假设正确吗?

显然。

地址相等意味着两个指针在内存中指向同一个对象。如果指针的类型是type_info*,那么显然这意味着对象(即firstsecond在你的情况下)传递给typeid()是相同的类型。毕竟,两个地址相同的指针,怎么可能指向不同的type_info对象,从而变成不同的类型呢?