NULL和nullptr

1.NULL

     NULL是C语言的重要宏之一。NULL本意为判断指针是否为空。在C语言中,NULL的定义如下:

   

#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif

      一般来说,NULL应该解释为指针变量,但NULL本身的变量值为0,这就造成NULL解释存在二义性。这种特性的存在,以至于NULL的发明人一直认为NULL带来了很多问题。

2.nullptr

     在C++11中,引入了nullptr这个概念。nullptr的定义如下:

     

// 头文件: cstddef
typedef decltype(nullptr) nullptr_t;

       nullptr 有自身类型,并可以隐式转换为各种指针类型。

       这个常量的发明,让空指针的语义更加合理。从编程来说,这个变量并无过大作用;但这种方法,显然有更好的含义。

猜你喜欢

转载自blog.csdn.net/wangzhezhilu001/article/details/103278458