幻世

个人博客地址: ffiirree.com

C++中的NULL、0和nullptr

在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吧。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ice__snow/article/details/52370313
上一篇宏定义中的do{...}while(0)
下一篇学习openCV的资料
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭