为什么typeid.name()使用GCC返回奇怪的字符和如何使它打印无名称? [英] Why does typeid.name() return weird characters using GCC and how to make it print unmangled names?
本文介绍了为什么typeid.name()使用GCC返回奇怪的字符和如何使它打印无名称?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当我运行 main.cpp
时,如何运行:
How come when I run this main.cpp
:
#include <iostream>
#include <typeinfo>
using namespace std;
struct Blah {};
int main() {
cout << typeid(Blah).name() << endl;
return 0;
}
通过使用GCC版本4.4.4编译:
By compiling it with GCC version 4.4.4:
g++ main.cpp
我得到:
4Blah
在Visual C ++ 2008中,我会得到:
On Visual C++ 2008, I would get:
struct Blah
是否有办法让它只打印 Blah
或 struct Blah c>
Is there a way to make it just print Blah
or struct Blah
?
推荐答案
code>是实现定义:一个实现甚至不需要返回不同的字符串为不同的类型。
The return of name
is implementation defined : an implementation is not even required to return different strings for different types.
你从g ++得到的是一个装饰名称,您可以使用 c ++ filt
命令或 __ cxa_demangle
。
What you get from g++ is a decorated name, that you can "demangle" using the c++filt
command or __cxa_demangle
.
这篇关于为什么typeid.name()使用GCC返回奇怪的字符和如何使它打印无名称?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文