空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
What is the difference between a null pointer constant (nullptr), a null pointer value and a null member pointer value?
在ISO/IEC 14882:2017(C++17(中,第5.13.7节"指针文字"指出:
5.13.7 指针文字 [lex.nullptr]
指针文字:空
1 指针文字是关键字 nullptr。它是 std::nullptr_t 类型的 prvalue。[注意:std::nullptr_t 是一种独特的类型,它既不是指针类型,也不是指向成员类型的指针;相反,此类型的 prvalue 是空指针常量,可以转换为空指针值或空成员指针值。参见 7.11 和 7.12。—尾注]
下面,nullptr
是std::nullptr_t
类型的 prvalue 。类型std::nullptr_t
的 prvalue 是空指针常量;因此nullptr
是一个空指针常量。空指针常量(nullptr
也是如此(可以转换为空指针值或空成员指针值。
现在我在引用的ISO/IEC 14882:2017的第7.11节"指针转换"中:
空指针常量是值为零或 std::nullptr_t 类型的 prvalue 的整数文本 (5.13.2(。空指针常量可以转换为指针类型;结果是该类型的 null指针值,并且可以与对象指针或函数指针类型的所有其他值区分开来。
我知道空指针常量是值为零或 prvalue 为std::nullptr_t
的整数文字,但我不明白与空指针值和空成员指针值的区别。我不明白从空指针常量转换为指针类型的结果如何是"该类型的空指针值"以及该上下文中的空指针值是什么。
我的问题是:
- 空指针常量(
nullptr
(、空指针值和空成员指针值有什么区别?
空指针常量 (nullptr(、空指针值和空成员指针值之间有什么区别?
空指针常量是 nullptr(或类型std::nullptr_t
的任何其他 prvalue (,或值为 0 的整数文本。空指针常量的示例:
NULL // a macro for one of the others
0
0L
nullptr
std::nullptr_t fun();
fun() // also a null pointer constant
其中,不要使用整数文本或 NULL,除非需要支持早于 C++11 的标准。
空指针值是表示空的指针类型的值。空指针值的示例:
(void*)nullptr // pointer to void
(int*)nullptr // pointer to object
using void_fun = void();
(void_fun*)nullptr // pointer to function
空成员指针值是表示空的成员指针类型的值。空成员指针值的示例:
(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
不是指针类型,也不是指向成员类型的指针。
- C++:将值 int(例如:0x00AAFAD8)转换为指针(指针本身也是 0x00AAFAD8 值)
- 空指针常量 (nullptr)、空指针值和空成员指针值之间有什么区别?
- 小于非空原始指针和空点之间的运算符
- 未分配正在释放的指针 - 指针问题
- 我应该如何定义返回指针的函数?(引用指针与指针指针)
- 空弱指针enable_shared_from_this
- 指针?指针功能
- 简单的功能大小;了解指针-指针差异
- 当我删除指针指针时会发生什么
- 将向量向量转换为指针指针
- 理解c++中的指针指针以获得函数调用
- 在指针指针中更改价值
- 指针指针,动态内存分配
- 将共享指针的别名构造函数与空共享指针一起使用C++
- 如何在不取消引用指针的情况下返回指针指针值?
- Visual Studio C++ 空字符串指针
- 指针指针:std:vector vs. 数组
- C :指针与指针指针在二进制树中插入节点
- 无法将空函数指针作为模板参数传递
- 空*到指针