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

为什么运行此命令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?


慕容708150
浏览 917回答 3
3回答

慕斯709654

实现的返回name是定义的:甚至不需要实现为不同类型返回不同的字符串。从g ++得到的是修饰的名称,您可以使用c++filt命令或来“分解” __cxa_demangle。

慕的地8271018

返回的字符串是实现定义的。gcc正在做的是返回错误的名称。您可以使用c ++ filt将损坏的名称转换为纯文本> a.out | c++filt

慕工程0101907

有没有办法使它只是打印Blah还是struct Blah?否。结果std::typeinfo::name()不确定。它甚至可能为所有类型返回相同的字符串(或者,实际上对于所有类型都为空字符串),并且实现仍然是符合标准的。您一定不能依靠它的结果。真的,我发现对它唯一有用的是调试。告诉我们您需要什么。特质通常是您所使用的。
打开App,查看更多内容
随时随地看视频慕课网APP