C/C++-NULL与nullptr的区别

NULL

NULL是一个宏定义,在C和C++ 中的定义不同,C中NULL为(void*)0,而C++ 中NULL为整数0。

所以在C++ 中int p=NULL;实际表示将指针P的值赋为0,而*C++ 中当一个指针的值为0时,认为指针为空指针。

nullptr

nullptr是c++11中的关键字,表示空指针。

是一个字面值常量,类型为std::nullptr_t,空指针常数可以转换为任意类型的指针类型。

在c++中(void * )不能转化为任意类型的指针,即 int *p=(void *)是错误的,但int *p=nullptr是正确的,原因

对于函数重载:若c++中 (void *)支持任意类型转换,函数重载时将出现问题下列代码中fun(NULL)将不能判断调用哪个函数

例子

1
2
3
4
5
6
7
void fun(int i){cout<<"1";};
void fun(char *p){cout<<"2";};
int main()
{
fun(NULL); //输出1,c++中NULL为整数0
fun(nullptr);//输出2,nullptr 为空指针常量。是指针类型
}