等于type_info的地址是否意味着相同的类型?

时间:2011-08-11 12:29:12

标签: c++ visual-c++ rtti typeid typeinfo

我是微优化code for identifying object types。我假设我可以使用以下内容来检查在同一模块中实例化的两个对象是否具有相同的类型:

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引用,该引用后面的对象就保证live until the module is unloaded。因此,一旦返回引用,其他任何对象都不能占用相同的地址。

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

这是正确的假设吗?

1 个答案:

答案 0 :(得分:3)

显然。

等号地址表示两个指针都指向内存中的同一个对象。如果指针的类型为type_info*,那么显然它意味着传递给first的对象(即secondtypeid())属于同一类型。毕竟,具有相同地址的两个指针怎么可能引用不同的type_info对象,从而变成不同的类型?