为什么typeid.name()使用GCC返回奇怪的字符和如何使它打印无名称? [英] Why does typeid.name() return weird characters using GCC and how to make it print unmangled names?

查看:1236
本文介绍了为什么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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆