Will相等的type_info地址表示相等的类型
Will equal type_info addresses mean equal 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
引用,该引用后面的对象就可以保证一直存在,直到模块被卸载。因此,一旦返回了引用,其他对象就不能占用相同的地址。
因此,如果地址匹配,那么它们是相同的type_info
对象和相同的数据类型。如果实现为同一类型返回不同的type_info
对象,则调用type_info::operator==
并进行额外的检查。
这个假设正确吗?
显然。
地址相等意味着两个指针在内存中指向同一个对象。如果指针的类型是type_info*
,那么显然这意味着对象(即first
和second
在你的情况下)传递给typeid()
是相同的类型。毕竟,两个地址相同的指针,怎么可能指向不同的type_info
对象,从而变成不同的类型呢?
相关文章:
- 表示类模板C++空类型
- C++显式类型转换(C 样式强制转换)的强制表示法和static_cast的多种解释
- 基于类型作为参数的字符串表示形式具有不同返回类型的函数
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 内存中的长长类型表示形式
- 整数文本太大,无法用任何整数类型表示--C++
- 您可以在具有相同表示形式的类型之间reinterpret_cast吗?
- 运行时错误:有符号整数溢出:964632435 * 10 无法在类型 'int' 中表示
- atoi() 表示int128_t类型
- 如何将升压数组表示为类型的指针?
- 使用模板元编程表示一组类型C++
- 默认构造函数是否表示C 中的通用类型的零
- C 中的运算符(::类型*)0表示什么意思
- 使用声明来表示模板声明中的类型
- 是否有一个术语来表示"single mutex deadlock"(具有非递归互斥锁的死锁类型情况)?
- 以C++显示浮点类型的二进制表示形式
- C++不可复制类型的值表示形式
- 如何获得Qopenglcontext(例如Qopenglcontext)的普通QT5类型的字符串表示
- 为什么对Chrono :: Nanseconds的表示类型是签名的整数类型
- 表示类型的变量?运行时的继承