在ISO / IEC 14882:2017(C ++ 17)中,声明了第5.13.7节“指针文字”:
5.13.7指针文字[lex.nullptr]
指针字面量:nullptr
1指针文字是关键字nullptr。 这是std :: nullptr_t类型的prvalue。 [注意:std :: nullptr_t是一种既不是指针类型也不是成员类型指针的独特类型;相反,此类型的prvalue是空指针常量,并且可以将其转换为null指针值或null成员指针值。参见7.11和7.12。 —尾注]
以下,nullptr
是类型std::nullptr_t
的prvalue。类型为std::nullptr_t
的prvalue是一个空指针常量;因此,nullptr
是一个空指针常量。空指针常量(nullptr
也是如此)可以转换为空指针值或空成员指针值。
我的问题是:
nullptr
),空指针值和空成员指针值之间有什么区别?空指针常量(nullptr),空指针值和空成员指针值之间有什么区别?
空指针常量为nullptr或值为0的整数文字。空指针常量的示例:
NULL // a macro for one of the others
0
0L
nullptr
其中,除非需要支持C ++ 11标准之前的版本,否则请仅使用nullptr。
空指针值是表示空值的指针类型的值。空指针值的示例:
(void*)nullptr
(int*)nullptr
Null成员指针值是代表null的成员指针类型的值。空成员指针值的示例:
(int some_class::*)nullptr