比特集的名字告诉我什么?

问题描述 投票:0回答:1

这里是一个简单的代码段,用于提供自动日期类型的名称。因此,我想知道标识符将具有什么位。它返回:“ St6bitsetILm32EE”。好的,位集是数据类型,大小是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; 
} 

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

c++ auto bitset
1个回答
1
投票

C ++中的名称为mangled

我想这个名字已经按照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::std::bitset<(unsigned long)32>类型的错误名称。

© www.soinside.com 2019 - 2024. All rights reserved.