c++ - 相同的 type_info 地址意味着相同的类型吗?

标签 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== 并进行额外检查。

这是一个正确的假设吗?

最佳答案

显然。

相同的地址意味着两个指针都指向内存中的同一个对象。如果指针的类型为 type_info*,那么显然它意味着传递给 的对象(即您的情况下的 firstsecond) typeid() 具有相同的类型。毕竟,具有相同地址的两个指针如何可能引用不同的 type_info 对象,从而变成不同的类型?

关于c++ - 相同的 type_info 地址意味着相同的类型吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7025840/

相关文章:

Delphi:是否可以枚举全局命名空间中记录的所有实例(~类型常量)?

c# - C++ 到 C#,C# 到带有外部 DLL 的 C++,DLL 未找到异常

c++ - 如何在 Bison 中优雅地处理具有多个组件的规则

c++ - 针对不同的编译时结果,使用枚举专门化 operator()

C++ 类引用

delphi - 如何链接 "parallel"类层次结构?

Python 3,如何设置 Visual Studio C++ 2015 编译器?

C++:在对象指针中为字符串赋值时的第一次机会异常

c++ - VTK - 从 6.1 迁移到 8.2 [2]

c++ - 如何确定字符串是否为 C++ 中的数字?