哪些平台不在type_info op ==中使用字符串比较?

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总是比较字符串.

什么是不比较字符串的平台?

Max*_*kin 4

在 libstdc++ 中它是由__GXX_MERGED_TYPEINFO_NAMES

在较新版本的 gcc 中(自 2009 年 7 月 23 日起),该宏默认设置为 0。它总是首先比较指针,如果失败,它们会进行完整的字符串比较。看这里

如果弱符号可用,我们过去默认会进行内联指针比较,但即使使用弱符号,有时在加载对象时名称也不会合并RTLD_LOCAL,所以现在我们总是使用strcmp默认值。

  • 值得注意的是,目标“有可能”覆盖此设置,但实际上没有目标这样做。 (2认同)