美文网首页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的使用

    NULL是C 标准库表示空指针的类型,nullptr是C++ stl表示空指针的类型事实上,NULL或是nullp...

  • C++11新特性(2)

    1.空指针nullptr nullptr与NULL的区别:对于NULL,是一个空指针常量,如果将NULL扩展为常数...

  • NULL 和nullptr区别

    今天在写一个程序的时候,想设置默认参数。其实自己想的和这个似乎一点关系都没有。 不过不重要。重点是了解了一些东西。...

  • nullptr

    nullptr 空指针:从 0 到 NULL,再到 nullptr NULL 是一个宏定义: 引起该问题的原因是 ...

  • C++11/14新特性

    1.nullptr nullptr 出现的目的是为了替代 NULL,传统 C++ 会把 NULL、0 视为同一种东...

  • C++学习笔记之NULL vs nullptr

    C++学习笔记之NULL vs nullptr

  • nullptr(转)

    引入nullptr的原因引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NUL...

  • C++11新特新学习

    1.nullptr 用于替换NULL,旧版本NULL和0等价; 原因:旧版本函数重载 void fun(int)和...

  • C++ 理解NULL和nullptr

    考虑以下代码简单的代码,向my函数传递NULL会发生什么问题? 编译无法通过,这里发生什么问题呢?NULL在C中实...

  • NULL,nullptr,null,nil,Nil,NSNull

    NULL:一般指的是C语言里指向基本数据类型以及C类型的空指针,表示空指针((void*)0)或是0,C++里NU...

网友评论

    本文标题:NULL和nullptr的使用

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