为了账号安全,请及时绑定邮箱和手机立即绑定

为什么typeid.name()使用GCC返回奇怪的字符,以及如何使其打印出未修改的名称?

为什么typeid.name()使用GCC返回奇怪的字符,以及如何使其打印出未修改的名称?

C++
慕容708150 2019-12-26 08:43:49
为什么运行此命令main.cpp:#include <iostream>#include <typeinfo>using namespace std;struct Blah {};int main() {  cout << typeid(Blah).name() << endl;  return 0;}通过使用GCC版本4.4.4进行编译:g++ main.cpp我得到这个:4Blah在Visual C ++ 2008上,我会得到:struct Blah有没有办法使它只是打印Blah还是struct Blah?
查看完整描述

3 回答

?
慕斯709654

TA贡献1840条经验 获得超5个赞

实现的返回name是定义的:甚至不需要实现为不同类型返回不同的字符串。


从g ++得到的是修饰的名称,您可以使用c++filt命令或来“分解” __cxa_demangle。


查看完整回答
反对 回复 2019-12-26
?
慕的地8271018

TA贡献1796条经验 获得超4个赞

返回的字符串是实现定义的。


gcc正在做的是返回错误的名称。

您可以使用c ++ filt将损坏的名称转换为纯文本


> a.out | c++filt


查看完整回答
反对 回复 2019-12-26
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

有没有办法使它只是打印

Blah还是struct Blah

否。结果std::typeinfo::name()不确定。它甚至可能为所有类型返回相同的字符串(或者,实际上对于所有类型都为空字符串),并且实现仍然是符合标准的。您一定不能依靠它的结果。真的,我发现对它唯一有用的是调试。

告诉我们您需要什么。特质通常是您所使用的。


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 915 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信