C++中的NULL、0和nullptr

原创 2016年08月30日 16:11:18

在C++11的标准中加了一个用来表示空指针的常量值——nullptr。由于我对nullptr的理解不够,这让我在表示空指针的时候就犯了选择困难症了。

我对C语言比较熟悉,在C中表示空指针的宏NULL是这样定义的:

 #define NULL ((void *)0)

这样就可以表示空指针的,但是在C++中这个宏是不可以的,因为C++的类型检查比C更严格,不允许把void *类型的指针赋给指针变量,因此在C++中宏NULL是这样定义的:

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

显然,在C++中NULL的值和0是等价的。然而这就引发了一个严重的重载问题,例如下面两个函数:

void fun(int a, int *b);
void fun(int a, int b);

如果我问程序中有如下调用:

int a = 0;
fun(a,NULL);

可以看出我们想调用的是:void fun(int a, int *b);但实际上我们调用的是第二个函数。

而C++11中添加的nullptr就可以解决这个重载问题,减少很多不必要的BUG,编译环境允许的话,还是多多使用nullptr吧。

版权声明:本文为博主原创文章,未经博主允许不得转载。

C++的NULL和nullptr

NULL引渡自C语言,而nullptr则是C++11的新特性。在C语言中,NULL被定义为(void*)0,而在C++语言中,NULL则被定义为整数0,编译器一般对其实际定义如下: #ifdef __...

C/C++中的NULL

      NULL表示空指针,用于表示一个无效的指针,它的值为0(早期C语言的实现中可能有非0空指针,现在已经不用)。对指针置NULL即标记指针无效,可以通过判断指针是否等NULL而防止指针的非法访...
  • xhz1234
  • xhz1234
  • 2010年11月22日 20:35
  • 5500

C/C++_中NULL与空字符串的区别

今天遇到一个问题认识到C/C++中 NULL 与 空字符串 "" 是不相同的 总结如下: 空字符串是"",会创建一个对象,内容是"",有内存空间。 而NULL,不会创建对象,没有内存空间。形象的比...

c++11中nullptr(与NULL的区别)

首先呢,要明白一点儿,NULL是一个无类型的东西,而且是一个宏。而宏这个东西,从C++诞生开始,就是C++之父嗤之以鼻的东西,他推崇尽量避免宏。而在他的FAQ中,也有相应的一个关于NULL与0的解释,...

【C++11】新特性——引入nullprt

1. 引入nullptr的原因 引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NULL感到陌生。但是C和C++中的NULL却不等价。NULL表示指针不指向任何对...
  • huang_xw
  • huang_xw
  • 2013年04月06日 16:35
  • 26916

【C++11新特性】 nullptr关键字

熟悉C++的童鞋都知道,为了避免“野指针”(即指针咋爱首次使用之前没有进行初始化)的出现,我们声明一个指针后最好马上对其进行初始化操作。如果暂时不明确该指针指向哪个变量,则需要赋予NULL值。除了NU...

C++ 判断指针为空的写法

C++之父的C++圣经《C++程序设计语言 特别版》中说: 大家不要听某些人说判断指针是否为空用(p==NULL)或(p!=NULL)的格式,C++之父认为这样写是不好的,提倡直接写(p)或(!p)...

C++11中的指针空值nullptr

C++11中的指针空值nullptr

指针成员变量需要初始化为nullptr吗?

今天的博客是与大家一起讨论一个问题,共同学习进步。上一篇博客用了很多代码段,演示了各种的情况下的内存泄露。今天在实际工程中又遇到了指针带来的错误,分君分享。描述: 有一个类A:class A { ...

数字视频格式及CTC的测试序列

现有的视频编码标准(H.264,H.265,AVS2等等)的输入视频格式均为YUV文件,YUV的文件格式相比于RGB文件,在信源采集的时候就可以进行一次压缩过程,RGB文件中,一个像素点有R,G,B三...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中的NULL、0和nullptr
举报原因:
原因补充:

(最多只允许输入30个字)