首先我们先看一段代码:
先定义两个函数,一个参数是指针,一个参数是数值类型
我们在main函数里使用int*和NULL作为参数进行分别调用:
查看控制台结果:
这时我们看到int*调用的是参数为指针的函数,但是NULL调用的是int类型的函数
众所周知C语言源码里对NULL的定义是#define NULL (void*) 0,是一个指针指向地址0
这时我们CTRL键点击C++的NULL,我们看到C++对NULL的定义是#define NULL 0,它本身就是个数值0
如果我们在c++里写:
void* b=NULL;
int* c=b;
编译器会直接语法错误。
这里可以看出,在C++中使用NULL本质上跟使用0是没有什么区别的
所以C++里指针的空值类型是nullptr,使用nullptr可以自动转换对应类型的指针
如果我们将NULL换成全部nullptr再运行程序:
我们发现两个都会调用参数为int*的函数
总结:
C++给指针赋空指针时应该使用nullptr关键字,
NULL在C和C++中的定义是不一致的,
NULL在C++中也不能进行自动转换为对应类型的指针,仅仅是数值0