2

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

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==则调用并执行附加检查。

这是一个正确的假设吗?

4

1 回答 1

3

明显地。

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

于 2011-08-11T12:34:38.963 回答