nullptr 既不是整型类型,也不是指针类型,nullptr 的类型是 std::nullptr_t(空指针类型),能转换成任意的指针类型。
NULL是被定义为0的常量,当遇到函数重载时,就会出现问题。避免歧义
函数重载:C++允许在同一作用域中声明多个类似的同名函数,这些同名函数的形参列表(参数个数,类型,顺序)必须不同。
例1
#include <iostream>
using namespace std;
void foo(int n) {
cout << "foo(int n)" << endl;
}
void foo(char* s) {
cout << "foo(char* s)" << endl;
}
int main(){
foo(NULL);
return 0;
}
编译上述代码,结果如下图所示,编译器提示有两个函数都可能匹配,产生二义性。
而用nullptr,编译器则会选择 foo(char* s)的函数,因为nullptr不是整数类型。
例2
void show(char *p){
cout<<"show(char *p)"<<endl;
}
void show(int a){
cout<<"show(int a)"<<endl;
}
void show(int *a){
cout<<"show(int *a)"<<endl;
}
show(NULL); //调用void show(int a)函数; 或者会显示二异性出错
show((char *)nullptr); //调用void show(char *p)函数
show((int*)nullptr); //调用void show(int *a)
参考C++空指针使用nullptr代替NULL_nullptr替代 null-CSDN博客
nullptr和NULL区别-CSDN博客