Twi*_*ard 1 c++ language-lawyer
首先,std::nullptr_t是核心语言类型,那么为什么它在std命名空间中呢?你没有看到std::char或std::int。
其次,它在std命名空间中的什么位置?当我在 Visual Studio 中右键单击以查看其声明位置时,它显示“符号 nullptr_t 未位于任何源文件中”。如果std::nullptr_t没有在std命名空间中声明,为什么包含的代码std::nullptr_t编译?
编辑: 微软网站上的此链接说 nullptr 是内置类型,并且内置类型未在头文件中定义。
\n\nstd::nullptr_t 是核心语言类型
\n
std::nullptr_t是一个基本类型(又名内置类型),如此处所述。尽管它可以隐式转换为任何指针类型,但它甚至不是指针类型。此外,它是cstddef在 namepsace 的标头内定义的std标头内部定义的,如下引用。
\n\n指针字面量是关键字
\nnullptr。它是类型 的纯右值std\xe2\x80\x8b::\xe2\x80\x8bnullptr_\xc2\xadt。\n[\xc2\xa0注意:std\xe2\x80\x8b::\xe2\x80\x8bnullptr_\xc2\xadt是一种不同的类型,既不是指针类型也不是指向成员的指针类型;相反,这种类型的纯右值是空指针常量,可以转换为空指针值或空成员指针值。\n请参阅 [conv.ptr] 和 [conv.mem]。\n\xe2\x80\x94\ xc2\xa0结束注释\n\xc2\xa0]
来自cstddef.syn:
\n\n\n标题
\n<cstddef>概要Run Code Online (Sandbox Code Playgroud)\nnamespace std {\n using nullptr_\xc2\xadt = decltype(nullptr);\n\n //other things here\n}\n