NULL和nullptr的使用

NULL是C 标准库表示空指针的类型,nullptr是C++ stl表示空指针的类型
事实上,NULL或是nullptr都不是C/C++的关键字

NULL和nullptr的使用应该优先选用nullptr(参见Effective Modern C++第3章条款8)
理由:

  1. NULL具有不确定性
    NULL通常被这样定义
#define NULL 0L

由此产生NULL是long整形数或是空指针的不确定 导致以下代码编译出错

static void test(int p) {
    std::cout << "test(int)" << std::endl;
}

test(NULL);

2.nullptr解决了这个问题
先贴一段自定义的nullptr实现

//代码来自wiki
const class nullptr_t
{
public:
    template
    inline operator T*() const //强制类型转换为某种指针类型时时返回0
        { return 0; }

    template 
    inline operator T C::*() const //强制类型转换为成员变量时返回0
        { return 0; }
 
private:
    void operator&() const; //禁止引用(空指针不应当有引用)
} nullptr = {};

nullptr的实现代码涉及到重载符号以及强制类型转换
nullptr可以被强制转换成任何类型的指针,而非NULL这样的实质上是一个long整数

你可能感兴趣的:(NULL和nullptr的使用)