美文网首页C/C++
NULL和nullptr的使用

NULL和nullptr的使用

作者: cx7 | 来源:发表于2019-04-02 23:36 被阅读0次

    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<class T>
        inline operator T*() const //强制类型转换为某种指针类型时时返回0
            { return 0; }
    
        template<class C, class T> 
        inline operator T C::*() const //强制类型转换为成员变量时返回0
            { return 0; }
     
    private:
        void operator&() const; //禁止引用(空指针不应当有引用)
    } nullptr = {};
    

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

    相关文章

      网友评论

        本文标题:NULL和nullptr的使用

        本文链接:https://www.haomeiwen.com/subject/pfbnbqtx.html