C++11允许使用nullptr代替0或NULL来指定指针不指向任何指(这与拥有未定义的值不同)。这个新特性特别有助于避免将空指针解释为整数值发生的错误。
例如:
void f(int);
void f(void*);
f(0); //calls f(int)
f(NULL); //calls f(int) if NULL is 0 容易产生歧义
int *p = NULL; //NULL本质上就为0
f(p);//calls f(void)
f(nullptr); //calls f(void*)
所以我们应该要用C++11的新关键字nullptr来设置空指针。
注意:
nullptr是一个新的关键字。它会自动转换为一个指针类型,但不会转换为任何整数类型。它的类型是std::nullptr_t,所以你现在甚至可以重载传递空指针的操作。std::nullptr_t算作一个基本数据类型。
#include <iostream>
using namespace std;
void f(int*)
{
cout << "调用了void f(int*)" << endl;
}
void f(double*)
{
cout << "调用了void f(double*)" << endl;
}
void f(std::nullptr_t)
{
cout << "调用了void f(std::nullptr_t)" << endl;
}
int main()
{
int *a = nullptr;
double *b = nullptr;
f(a); //调用了void f(int*)
f(b); //调用了void f(double*)
f(nullptr); //调用了void f(std::nullptr_t)
return 0;
}