C++中nullptr和NULL

转自:https://www.cnblogs.com/mrlsx/p/5510496.html

1.NULL为0值,nullptr是指针对象

NULL是一个宏定义,c中NULL为(void*)0,而c++中NULL为整数0:

//C语言中NULL定义
#define NULL (void*)0 

//c++中将NULL定义为整数0
#define NULL 0 

在c++中int *p=NULL; 实际表示将指针P的值赋为0,而c++中当一个指针的值为0时,认为指针为空指针,见下例:

    int *p=0;//指向空指针
    cout<<(p==NULL);

#输出:1

    int *p=NULL;
    cout<<(p==NULL);
#输出:1

#以上两个结果可以看出,NULL在定义指针时是和0等价的。

    int *p=nullptr;
    cout<<(p==NULL);
#输出:1

但是下面的重载会出现问题

void fun(int i){cout<<"1";};
void fun(char *p){cout<<"2";};
int main()
{
fun(NULL);  
fun(nullptr);
}
#报错: error: call of overloaded 'fun(NULL)' is ambiguous
#如果注释掉这一句的话,是可以正常输出2的

上面的实验说明了NULL既可以转换为int也可以*,而nullptr只能转化为任意类型的指针*。

原文地址:https://www.cnblogs.com/BlueBlueSea/p/13897757.html