【问题标题】:What is the logic of demangling?demangling的逻辑是什么?
【发布时间】:2023-01-29 00:47:56
【问题描述】:

我有这样的代码。代码正在运行 我知道代码打印 '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
}

【问题讨论】:

  • 我没有看到您的代码中发生任何 demangling。
  • 我认为你混淆了 mangling 和 demangling。 Mangling 将面向用户的名称(如 int)转换为 ABI 名称(如 i),而 demangling 是相反的过程,你将 ABI 名称(如 i)转换回用户友好的名称(如 int)。

标签: c++ gcc


【解决方案1】:

但为什么编译器会为 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-28
    • 2010-09-26
    • 2011-09-07
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    相关资源
    最近更新 更多