6

使用 gcc,当我使用 typeid 请求对象/变量的类型时,我从 type_info::name 方法得到的结果与我期望在 Windows 上得到的结果不同。我搜索了一下,发现 RTTI 名称是特定于实现的。

问题是,我想获得一个类型的名称,因为它将在 Windows 上返回。是否有捷径可寻?

4

3 回答 3

7

如果这是您要问的,则没有编译器开关可以使 gcc 的行为类似于 msvc 关于type_info::name().

但是,在您的代码中,您可以依赖 gcc 特定__cxa_demangle功能。

实际上有一个关于 SO 的答案可以解决您的问题

参考:libstdc++ 手册,第 40 章

于 2010-01-18T10:18:29.090 回答
1

c++ 函数名称实际上包括所有返回和参数类型信息以及类和方法名称。编译时,它们被“修改”成标准形式(每个编译器的标准),可以充当汇编器符号并包含所有类型信息。

您需要运行一个函数或程序来反转这种修饰,称为demangler

尝试运行

c++filt myoutput.txt

关于函数的输出。这会将真实的符号名称重新转换为人类可读的形式。

于 2010-01-18T10:47:39.743 回答
0

基于this other question Is there an online name demangler for C++? 我为此编写了一个在线工具:c++filtjs

于 2012-03-31T08:01:58.247 回答