繁体   English   中英

demangling的逻辑是什么?

[英]What is the logic of demangling?

我有这样的代码。 代码正在运行我知道代码打印 'm' 因为 demangling ( https://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html )

但是为什么编译器为size_t打印'm'? 映射的逻辑是什么 ('i' --> int // 很清楚,但是为什么 'm' --> size_t )

#include <typeinfo>

using namespace std;


int main() {
    size_t i = 5;
    cout << "Type: " << typeid(i).name() << '\n'; // Type: m
}

如果您检查itanium ABI ,您会看到所有无符号类型都使用字母表中的下一个字母(除了char之外)。 intiunsigned intj longlunsigned longm 由于size_t不是 itanium 类型,它由unsigned long表示,因此由m表示。

分配的字母基本上是任意的,所以尽管它们的分配有一些逻辑,但它们到底是什么并不重要。 它们是实现细节并且是特定于平台的,如果您需要知道它们的含义,请使用像c++filthttp://demangler.com/abi::__cxa_demangle 这样的 demangler

但为什么编译器会为 size_t 打印“m”?

因为size_t在这个平台上unsigned long ,而字母m在这个平台上这个编译器里代表unsigned long

映射的逻辑是什么('i' --> int // 很清楚,但是为什么'm' --> size_t)

没有“逻辑”,只有规定什么字母是什么类型的规则。 参见https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling-builtin

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM