C++11之前,我们使用 ptr = NULL对某个指针进行初始化。
同时还使用ptr == NULL进行指针是否为空的判断。
在C语言中,空指针的值表示为
#define NULL (void *)0
但是C++对语法的类型检查更为严格,(void *)0就不好使了,比如:
int *p = (void *)0; // error, cannot assign void* to int*
所以在C++中的NULL为 #define NULL 0,但这又会导致函数重载时遇到困难:
void foo(char c, void *p);
void foo(char c, int i);
int main()
{
foo( 'x', NULL ); //?? Which foo
}
C++引入nullptr,作为一个新的关键字,解决了上述让人头疼的问题。
让我们再回顾一下几种“0”的区别。
- 整数0 -- int number zero : 0
- 指向空类型的指针 -- a pointer to an object of unknown type : void*
- 无指向的空指针 -- a pointer that does not point to an object : nullptr