本文主要是介绍使用c++filt 还原RTTI返回的类型名称,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
考虑下面的代码
const char ori[] = "feelling good";
auto copy = ori;
std::cout << typeid(ori).name() << '\n';
std::cout << typeid(copy).name() << '\n';
在g++ 编译后输出
A14_c
PKc
typeid操作符会返回一个const type_info&对象,调用该对象的name()方法会返回一个const char*,但是具体的内容是跟编译器的实现相关的。cppreference里面有讲到:
Some implementations (such as MSVC, IBM, Oracle) produce a human-readable type name. Others, most notably gcc and clang, return the mangled name.
可以看到g++输出的是一个mangled name,那怎么知道这个这个字符串具体代表什么意思呢?cppreference有提到:
It can also be piped through the commandline utility
c++filt -t
.
用c++filt -t 可以还原,例如:
[-bash-4.2 $]c++filt -t "A14_c"
char [14]
[-bash-4.2 $]c++filt -t "PKc"
char const*
除了类型名称以外,还可以用来还原编译后的函数名,参考这篇文章:使用c++filt命令还原C++编译后的函数名-CSDN博客
这篇关于使用c++filt 还原RTTI返回的类型名称的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!