Aby*_*byx 13 c++ rtti typeid typeinfo
以下是典型的实现type_info::operator==:
#if _PLATFORM_SUPPORTS_UNIQUE_TYPEINFO
bool operator==(const type_info& __rhs) const {
return __mangled_name == __rhs.__mangled_name;
}
#else
bool operator==(const type_info& __rhs) const {
return __mangled_name == __rhs.__mangled_name ||
strcmp(__mangled_name, __rhs.__mangled_name) == 0;
}
#endif
Run Code Online (Sandbox Code Playgroud)
在libstdc ++中它受控制__GXX_MERGED_TYPEINFO_NAMES,
在libc ++中_LIBCPP_NONUNIQUE_RTTI_BIT,
MSVC总是比较字符串.
什么是不比较字符串的平台?
在 libstdc++ 中它是由
__GXX_MERGED_TYPEINFO_NAMES
在较新版本的 gcc 中(自 2009 年 7 月 23 日起),该宏默认设置为 0。它总是首先比较指针,如果失败,它们会进行完整的字符串比较。看这里:
如果弱符号可用,我们过去默认会进行内联指针比较,但即使使用弱符号,有时在加载对象时名称也不会合并
RTLD_LOCAL,所以现在我们总是使用strcmp默认值。