目录
ID:HL_5461
引言
很多初学C++的人可能都会有这样一个疑惑:C++为何要新增一个nullptr表示空指针呢?
我们先来看下面这个例子:
void f(int)
{
cout << "int" << endl;
}
void f(int*)
{
cout << "int*" << endl;
}
int main()
{
f(0);
f(NULL);
return 0;
}
根据猜测,0为int类型,NULL为指针类型,所以打印出来应该为int和int*。
我们来看实际运行结果:
两个都为int,这是为什么呢?
一、C++对NULL的处理
选中NULL,右击转到定义,我们可以看见如下代码:
不难发现,NULL其实是一个宏,而它本质为0,所以在之前的例子中,对f(NULL)这段代码,编译器则自动将其匹配成了f(int)
二、nullptr的引入
其实看到这里,问题已经很清楚了,C++11标准增加了新的关键字 nullptr就是为了解决类似上述问题,保证任何情况下都表示空指针。
我们将上面的例子做一做修改:
void f(int)
{
cout << "int" << endl;
}
void f(int*)
{
cout << "int*" << endl;
}
int main()
{
f(0);
f(NULL);
f(nullptr);
return 0;
}
其余不变,主函数中新增一句f(nullptr)。
来看运行结果:
很明显,不同于NULL可以是一个整型,nullptr永远是一个指针类型。
总结
总之,不推荐使用NULL代表空指针,尽量使用nullptr。
若有错误,欢迎大家批评斧正!