语法:c++对关于空指针0/NULL/nullptr三者的演变

来源:互联网 发布:城市轨道交通系统知乎 编辑:程序博客网 时间:2024/06/07 14:32

字面意义上的解释:

  • 0:整型常量
  • NULL:预处理符号
  • nullptr:空指针类型常量

其中前两者在C中出现,最后一个在C++11中出现。我们平常会使用这三个符号来表示空指针,但是他们之间还是有许多差别。

NULL 声明在cstdlib中:

  #ifdef __cplusplus  #define NULL 0  #else=  #define NULL ((void *)0)  #endif

发现在C中NULL的类型为void *,是因为C中允许NULL进行隐式转换,但是C++中不允许隐式转换,但是为了兼容C,在C++中制定一个指针为NULL的时候,实际上是将其赋值为0。

C++支持者对C中保留的宏定义极力排除,主张在程序中尽量避免使用宏(毕竟宏可以通过const和inline内联实现更好的效果),所以C++中引入了nullptr,它是一个常量,类型为std::nullptr_t,可以转换为任意的指针类型。C++中的void*不可以转化为任意的类型,因为如果支持,在下面情况中会出现不知道调用哪个函数:

void fun(int i){cout<<"1";};void fun(char *p){cout<<"2";};int main(){fun(NULL);  //输出1,c++中NULL为整数0fun(nullptr);//输出2,nullptr 为空指针常量。是指针类型}

转自:nullptr