bitset 的名字告诉我什么?

what is the name of bitset telling me?

这是一个简单的代码片段,用于给出自动日期类型的名称。所以我想知道 bitset 会有什么标识符。它 returns : "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; 
} 

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

C++ 中的名称是 mangled

我猜这个名字已经根据 Itanium C++ ABI 规则被破坏了。规则指定每个 type/identifier/function 名称如何被破坏。从那里你可以尝试手动 demangle 类型:

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

所以 St6bitsetILm32EE 是类型 ::std::bitset<(unsigned long)32> 的错位名称。