bitset 的名字告诉我什么?

j0h*_*j0h 0 c++ bitset auto

这是一个简单的代码片段,用于给出自动日期类型的名称。所以我想知道 bitset 会有什么标识符。它返回:“St6bitsetILm32EE”。好的,bitset 是数据类型,32 是大小,我不确定这个名字还告诉我什么。我不知道 St6、I、LM 或 EE 指的是什么。澄清会很好。

// C++ program to demonstrate working of auto 
// and type inference 
#include <bits/stdc++.h> 
using namespace std; 
#define M 32  
int main() 
{ 
    auto x = 5;    //i for integer
    auto y = 3.37; //D for double
    auto ptr = &x; //Pi for pointer
    auto z = "WTF";//PKc for string or char**
    bitset <M> bset(2);
    auto k = bset; //bitset :: St6bitsetILm32EE  
     cout << typeid(x).name() << endl 
         << typeid(y).name() << endl 
         << typeid(k).name() << endl 
         << typeid(ptr).name() << endl 
         << typeid(z).name() << endl; 

    return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

请原谅我的评论,我实际上只是了解了 auto 数据类型。

Kam*_*Cuk 5

C++ 中的名称被破坏

我猜这个名字已经根据Itanium C++ ABI规则被破坏了。这些规则指定了每个类型/标识符/函数名称是如何被修改的。从中您可以尝试手动取消类型:

  • St<substitution>。它用于压缩::std::命名空间前缀。
  • 6<number>。它对以下标识符的长度进行编码。接下来的 6 个字符构成标识符。
  • bitset<identifier>。它有 6 个字符。它是这个类的标识符。
  • I开始<template-args>。它是模板参数的列表。
    • 然后跟着一个 <template-arg>
    • L开始<expr-primary>
      • m<type>。这是模板参数的类型,而不是它的值。m表示类型是unsigned long.
      • 32是作为模板参数传递的值。32不是这里的大小。
    • E结束<expr-primary>
  • E结束<template-args>

所以St6bitsetILm32EE是A型重整名称::std::bitset<(unsigned long)32>