Rob*_*rtS 6 c++ null pointers literals nullptr
在 ISO/IEC 14882:2017 (C++17) 中,第 5.13.7 节“指针文字”规定:
5.13.7 指针文字 [lex.nullptr]
指针字面量:nullptr
1 指针字面量是关键字 nullptr。它是 std::nullptr_t 类型的纯右值。[注意:std::nullptr_t 是一个独特的类型,它既不是指针类型也不是指向成员类型的指针;相反,这种类型的纯右值是空指针常量,可以转换为空指针值或空成员指针值。见 7.11 和 7.12。——尾注]
下面nullptr是一个类型的纯右值std::nullptr_t。类型的纯右值std::nullptr_t是空指针常量;因此nullptr是一个空指针常量。空指针常量(so is nullptr)可以转换为空指针值或空成员指针值。
现在我在 ISO/IEC 14882:2017 的第 7.11 节“指针转换”中提到:
空指针常量是具有零值的整数文字 (5.13.2) 或类型为 std::nullptr_t 的纯右值。空指针常量可以转换为指针类型;结果是该类型的空指针值,并且与对象指针或函数指针类型的所有其他值区分开来。
我知道空指针常量是一个值为 0 或类型为纯右值的整数文字std::nullptr_t,但我不明白与空指针值和空成员指针值的区别。我不明白从空指针常量到指针类型的转换结果如何是“该类型的空指针值”以及该上下文中的空指针值是什么。
我的问题是:
nullptr)、空指针值和空成员指针值之间有什么区别?空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
空指针常量要么是 nullptr(或任何其他类型的纯右std::nullptr_t值),要么是值为 0 的整数文字。 空指针常量的示例:
NULL // a macro for one of the others
0
0L
nullptr
std::nullptr_t fun();
fun() // also a null pointer constant
Run Code Online (Sandbox Code Playgroud)
其中,不要使用整数文字或 NULL,除非您需要支持比 C++11 标准更旧的标准。
空指针值是表示空值的指针类型的值。空指针值示例:
(void*)nullptr // pointer to void
(int*)nullptr // pointer to object
using void_fun = void();
(void_fun*)nullptr // pointer to function
Run Code Online (Sandbox Code Playgroud)
空成员指针值是表示空的成员指针类型的值。空成员指针值示例:
(int some_class::*)nullptr // pointer to data member
using mem_void_fun_ptr = void(some_class::*)(); // unfortunately cannot alias member
// function type as far as I know,
// so we alias pointer to it instead
(mem_void_fun_ptr)nullptr // pointer to member function
Run Code Online (Sandbox Code Playgroud)
请注意,std::nullptr_t它不是指针类型,也不是指向成员类型的指针。