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)  |