这里是一个简单的代码段,用于提供自动日期类型的名称。因此,我想知道标识符将具有什么位。它返回:“ 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 ++中的名称为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>
类型的错误名称。