通常定义一个指针,为了避免变成野指针,通常会给指针赋空值
NULL是一个宏定义# define NULL 0
,所有C++中使用0作为NULL的值,NULL==0。
int *p=0;
int *p=NULL;
int *p=nullptr;
但有时候NULL和0在重载的时候会产生歧义
#include <iostream>
using namespace std;
void fun(int){cout<<"调用了int"<<endl;}
void fun(char*){cout<<"调用了char*"<<endl;}
int main(){
fun(NULL);//NULL为指针空值
fun(nullptr)
}
运行结果
调用了int
调用了char*
请按任意键继续. . .
NULL和nullptr都表示空指针
fun(NULL)原本想调用fun(char*)这个重载,但由于在C++中 NULL==0,所以fun(NULL)==fun(0),调用第一个函数,这时要想正确调用重载函数,用nullptr代替NULL,就不会出错。