我有一个这样的代码。代码正在工作我知道代码由于去管理而打印“m”(https://gcc.gnu.org/onlinedocs/libstdc++/manual/ext_demangling.html)
但为什么编译器会打印“m”呢size_t?映射的逻辑是什么 ('i' --> int// 很清楚,但为什么是 'm' --> size_t)
#include <typeinfo>
using namespace std;
int main() {
size_t i = 5;
cout << "Type: " << typeid(i).name() << '\n'; // Type: m
}
Run Code Online (Sandbox Code Playgroud)
如果您检查itanium ABI,您会发现所有无符号类型都使用字母表中其带符号等效项之后的下一个字母(除了char)。int伊斯兰i国。unsigned int 是是。 由于不是 itanium 类型,因此由 表示。jlonglunsigned longmsize_tunsigned longm
分配的字母本质上是任意的,因此尽管它们的分配有一定的逻辑,但它们到底是什么并不重要。它们是实现细节并且是特定于平台的,如果您需要知道它们的含义,请使用像c++filt、http://demangler.com/或abi::__cxa_demangle 这样的demangler