c++ - c+ + - 空指针常量(空ptr ),空指针值和空成员指针值之间的区别是什么?

  显示原文与译文双语对照的内容

在ISO/IEC 14882:2017 (C++17 )中,节5.13.7"指针文本"被声明为:

5.13.7指针文本[lex.nullptr ]

指针文本:nullptr

1指针文本为关键字nullptr,它是std::nullptr_t类型,[注意:std::nullptr_t是非重复类型,既不是指针类型,也不是指向成员类型的指针;相反,此类型的prvalue是一个空指针常量,可以转换为空指针值或空成员指针值。See 7.11和7.12.—结束注释]

接下来,nullptrstd::nullptr_t类型的prvalue,prvalue类型为std::nullptr_t是空指针常量;因此nullptr是一个空指针常量,空指针常量(nullptr也是)可以转换为空指针值或空成员指针值。

现在我在引用部分7.11,"指针转换"的ISO/IEC 14882:2017:

空指针常量是整数文本(5.13.2 ),值为零或prvalue类型为,空指针常量可以转换为指针类型;结果是该类型的空指针值,它与对象指针或函数指针类型的其他值区分开来。

我知道空指针常量是一个值为零的整型文本或类型为n��GMέ���K�G��m쌧的整型文本,但我不理解null指针值和null成员指针值之间的区别,,我不知道从空指针常量到指针类型的转换结果是"类型的空指针值",以及该上下文中的空指针值是什么。

我的疑问是:

  • 空指针常量(这是nullptr ),空指针值和空成员指针值之间的区别是什么?

时间:

空指针常量(空ptr ),空指针值和空成员指针值之间的区别是什么?

Null指针常量可以是nullptr (或者其他prvalue类型为std::nullptr_t ),或者是值为0.的整数Null指针常量示例:


NULL // a macro for one of the others


0


0L


nullptr



std::nullptr_t fun();


fun() // also a null pointer constant



其中,除非你需要支持早于C++11标准,否则不要使用整数或NULL。

Null指针值是表示Null的指针类型的值,空指针值的示例:


(void*)nullptr // pointer to void


(int*)nullptr // pointer to object



using void_fun = void();


(void_fun*)nullptr // pointer to function



Null成员指针值是表示Null的成员指针类型的值,空成员指针值示例:


(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



请注意,std::nullptr_t不是指针类型,也不是指向成员类型的指针。

...