C ++ 11字符串和sizeof nullptr的typeid

问题描述

我是c ++ 11中的新手,并且知道s3://<bucketname e.g my-s3-bucket-ewhbfhvf>/<data-folder e.g data> typeid().name()。我只是在玩一些代码,但发现nullptrsizeof(nullptr),而且4是一组复杂的字符typeid(str).name()

NSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

我对输出有些困惑。有人可以请我解释一下吗?

解决方法

这两个都是实现定义

sizeof(nullptr)4

我假设在该平台上所有指针的大小均为4,并且选择了nullptr的大小来匹配该指针。

typeid(str).name()

std::string是模板std::basic_string<char,std::char_traits<char>>的实例化的别名。该名称将进一步修改,以符合平台的可执行文件格式。可能有一个工具可以对平台提供的名称进行“解密”。

,

nullptr的类型为nullptr_t,

npm uninstall -g create-react-app

所以,它是实现定义的。

由于名称修改C ++编译器正在执行操作,因此您看到的复杂字符串看起来像这样。由于重载,使用C ++进行了整形,因为相同的名称可以用于不同的函数或方法。或使用模板进行类型声明。您可以在https://en.wikipedia.org/wiki/Name_mangling#C++

中了解更多信息

这也是实现定义的,其他编译器可能会使用其他方案进行名称修饰。