问题描述
我是c ++ 11中的新手,并且知道s3://<bucketname e.g my-s3-bucket-ewhbfhvf>/<data-folder e.g data>
和typeid().name()
。我只是在玩一些代码,但发现nullptr
是sizeof(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++
中了解更多信息这也是实现定义的,其他编译器可能会使用其他方案进行名称修饰。