我正在微优化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==
并进行额外检查。
这是一个正确的假设吗?
最佳答案
显然。
相同的地址意味着两个指针都指向内存中的同一个对象。如果指针的类型为 type_info*
,那么显然它意味着传递给 的对象(即您的情况下的
具有相同的类型。毕竟,具有相同地址的两个指针如何可能引用不同的 first
和 second
) typeid()type_info
对象,从而变成不同的类型?
关于c++ - 相同的 type_info 地址意味着相同的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7025840/