1.NULL
NULL是C语言的重要宏之一。NULL本意为判断指针是否为空。在C语言中,NULL的定义如下:
#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif
一般来说,NULL应该解释为指针变量,但NULL本身的变量值为0,这就造成NULL解释存在二义性。这种特性的存在,以至于NULL的发明人一直认为NULL带来了很多问题。
2.nullptr
在C++11中,引入了nullptr这个概念。nullptr的定义如下:
// 头文件: cstddef
typedef decltype(nullptr) nullptr_t;
nullptr 有自身类型,并可以隐式转换为各种指针类型。
这个常量的发明,让空指针的语义更加合理。从编程来说,这个变量并无过大作用;但这种方法,显然有更好的含义。