NULL
来自cppreference.com
定义于头文件 <clocale>
|
||
定义于头文件 <cstddef>
|
||
定义于头文件 <cstdio>
|
||
定义于头文件 <cstdlib>
|
||
定义于头文件 <cstring>
|
||
定义于头文件 <ctime>
|
||
定义于头文件 <cwchar>
|
||
#define NULL /*implementation-defined*/ |
||
宏 NULL
是实现定义的空指针常量,可为
(C++11 前) | |
零值整数字面量,或为 std::nullptr_t 类型纯右值 |
(C++11 起) |
空指针常量可以隐式转换为任何指针类型;这种转换结果是该类型的空指针值。若空指针常量拥有整数类型,它亦可转换为 std::nullptr_t 类型纯右值。
可能的实现
#define NULL 0 // C++11 起 #define NULL nullptr |
注意
C 中,宏 NULL
可以拥有类型 void*
,但这在 C++ 中不允许。
示例
运行此代码
#include <cstddef> #include <type_traits> #include <iostream> class S; int main() { int* p = NULL; int* p2 = static_cast<std::nullptr_t>(NULL); void(*f)(int) = NULL; int S::*mp = NULL; void(S::*mfp)(int) = NULL; if (std::is_same_v<decltype(NULL), std::nullptr_t>) { std::cout << "NULL implemented with type std::nullptr_t\n"; } else { std::cout << "NULL implemented using an integral type\n"; } }
可能的输出:
NULL implemented using an integral type
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
CWG 903 | C++11 | 曾允许零值的表达式,如 1-1 | 只允许字面的零 |
参阅
nullptr(C++11) | 指定空指针值的指针字面量 |
(C++11) |
空指针字面量 nullptr 的类型 (typedef) |