我是微优化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==
个对象,则会调用它并进行额外检查。
这是正确的假设吗?
答案 0 :(得分:3)
显然。
等号地址表示两个指针都指向内存中的同一个对象。如果指针的类型为type_info*
,那么显然它意味着传递给first
的对象(即second
和typeid()
)属于同一类型。毕竟,具有相同地址的两个指针怎么可能引用不同的type_info
对象,从而变成不同的类型?