结论: NULL 就是 0 为 int 类型
nullptr 是 指针类型(可以随意转化成 int *,double * 等等)(只能修饰指针!!!)
#include <iostream>
using namespace std;
void func(int *p)
{
cout << "void func(int *p)" << endl;
}
void func(int p)
{
cout << "void func(int p)" << endl;
}
int main()
{
func(nullptr); // 想要调用重载函数 void func(int p)
return 0;
}
为什么我们通常 为了避免野指针 用 int* a =NULL 不出错
因为其中NULL的int类型 进行了隐式转换成了int* 类型 从而成功
#include <iostream>
using namespace std;
void func(int p)
{
cout << "void func(int p)" << endl;
}
int main()
{
func(nullptr); // 想要调用重载函数 void func(int p)
return 0;
}
而如果函数只有传参为int a 的函数时
传入nullptr会报错 因为 nullptr 为指针类型 并且可以隐式转换为任意指针类型 但是 指针类型无法转换为变量类型 则会报错
传NULL时 是会调用void func(int p) 函数的
但是编译器为了避免这种问题 设置了报错