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

时间:2018-04-11 11:16:19

标签: 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

在libstdc ++中,它由__GXX_MERGED_TYPEINFO_NAMES控制,
在libc ++中它是_LIBCPP_NONUNIQUE_RTTI_BIT
MSVC总是比较字符串。

哪些平台不比较字符串?

1 个答案:

答案 0 :(得分:2)

  

在libstdc ++中,它由__GXX_MERGED_TYPEINFO_NAMES

控制

In newer versions of gcc (since 23 Jul 2009) this macro is set to 0 by default。它总是首先比较指针,如果比较失败,它们将进行完整的字符串比较。 See here

  

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