天天看点

C++为什么要使用nullptr代替NULL

1.什么是空指针

空指针就是void*

2.为什么使用NULL表示空指针

C++中NULL定义为0:

#define NULL 0
           

在C++中void*不能隐式转换为其他类型,所以使用0(即NULL)代替控制指针。

为了说明NULL代替空指针存在的问题,下面看一个例子:

#include <iostream>

void go(int num)
{
    std::cout << "go num" << std::endl;
}

void go(void *p)
{
    std::cout << "go p" << std::endl;
}

void main()
{
    void *p = NULL;

    go(p);//go p

    go(NULL);//go num

    go(nullptr);//go p

    system("pause");
}
           

上面代码运行结果如下:

C++为什么要使用nullptr代替NULL

类似go函数重载了空指针和整型的情形下,NULL并不能表示空指针,就会出现错误。

3.nullptr

C++11引入nullptr表示空指针,即nullptr就是void*。

这样就可以保证在任何情况下,nullptr都可以表示空指针。

4.结论:

我们应该使用nullptr表示空指针,而不用NULL表示空指针。

继续阅读