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 __...
  • ColdCodes
  • ColdCodes
  • 2016年09月14日 16:41
  • 2212

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

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

C++学习笔记之NULL vs nullptr

写在前面随着C++11标准的出现,C++的规范也越来越严谨,在减少语言的二义性上,C++委员会确实做了很多努力。至于那些学了C++98或者03的标准,就以为C++很烂的人,我只想送四个字,坐井观天。N...
  • pkgk2013
  • pkgk2013
  • 2017年05月30日 14:19
  • 779

C++ Null 指针

在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。NULL 指针是一个定义在标准库中的值为零的常量。...
  • heyuchang666
  • heyuchang666
  • 2017年02月14日 11:53
  • 268

C++11/14/17 nullptr

nullptr的引入 什么是nullptr呢?为什么要引入nullptr呢?任何事物的产生都有其缘由和意义,nullptr也不例外。一切还得从0开始说。C++98中的0即表示整数字面值0,又表示指针...
  • u011304970
  • u011304970
  • 2017年05月16日 09:30
  • 236

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

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

C/C++中的时间操作

1. 词汇解释 Coordinated Universal Time(UCT) 协调世界时,又称为世界标准时间,亦即格林威治标准时间(Greenwich Mean Time,GMT)。中国内地...
  • yasaken
  • yasaken
  • 2012年03月26日 17:20
  • 4958

NULL,nullptr的区别与联系

1)在c语言中NULL代表空指针。 例如:int *i = NULL; #define NULL ((void*)0)   意思是NULL是void*指针,给int *i 赋值的时候隐式转换为相应...
  • fxbjye
  • fxbjye
  • 2017年09月15日 11:29
  • 459

null和NULL和nullptr和””区别

突然想到这个有趣的问题:C语言和C++对大小写是敏感的,也就是说null和NULL是区别对待的。NULL代表空地址,null只是一个符号。...
  • cc1949
  • cc1949
  • 2016年04月26日 12:47
  • 10528

nullptr与NULL区别

#include using namespace std; void show(int num) { cout
  • wmaoshu
  • wmaoshu
  • 2016年02月14日 10:59
  • 961
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++中的NULL、0和nullptr
举报原因:
原因补充:

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