为什么运行此命令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。
慕的地8271018
TA贡献1796条经验 获得超4个赞
返回的字符串是实现定义的。
gcc正在做的是返回错误的名称。
您可以使用c ++ filt将损坏的名称转换为纯文本
> a.out | c++filt
慕工程0101907
TA贡献1887条经验 获得超5个赞
有没有办法使它只是打印
Blah
还是struct Blah
?
否。结果std::typeinfo::name()
不确定。它甚至可能为所有类型返回相同的字符串(或者,实际上对于所有类型都为空字符串),并且实现仍然是符合标准的。您一定不能依靠它的结果。真的,我发现对它唯一有用的是调试。
告诉我们您需要什么。特质通常是您所使用的。
- 3 回答
- 0 关注
- 972 浏览
添加回答
举报
0/150
提交
取消