文档章节

NULL 和nullptr区别

 混世太保
发布于 2017/07/12 23:07
字数 277
阅读 40
收藏 0

今天在写一个程序的时候,想设置默认参数。其实自己想的和这个似乎一点关系都没有。

不过不重要。重点是了解了一些东西。

在c++11中引入了nullptr,因为NULL会引起二义性。所以就不要用NULL,用nullptr不会引起二义性。


//g++ nullAndNullptr.cpp -std=c++11

#include <iostream>
using namespace std;

void foo(int i){
	printf("foo(int i)");
}

void foo(char*p){
	printf("foo(char*p)");
}

int main(){
	foo(nullptr);
	foo(NULL);
	return 0;
}
// nullAndNullptr.cpp: In function ‘int main()’:
// nullAndNullptr.cpp:14:10: error: call of overloaded ‘foo(NULL)’ is ambiguous
//   foo(NULL);
// nullAndNullptr.cpp:14:10: note: candidates are:
// nullAndNullptr.cpp:4:6: note: void foo(int)
//  void foo(int i){
// nullAndNullptr.cpp:8:6: note: void foo(char*)
//  void foo(char*p){

 

  1. 那是为什么呢?查看NULL的定义
     #ifndef NULL  
    #ifdef __cplusplus  
    #define NULL    0  
    #else  
    #define NULL    ((void *)0)  
    #endif  
    #endif

     

   我们可以看到在c++中NULL只是0,在c中NULL是((void*) 0)

据说是因为(void*) 转换到(char*)和转换到int的路径一样长。编译器因此就产生了二义性。

但是不同编译器,会有不同的处理方式,可能有的编译器就是可以编译。

 

 

 

 

© 著作权归作者所有

粉丝 0
博文 25
码字总数 11812
作品 0
厦门
私信 提问
C++11 NULL和nullptr

众所周知,C语言使用NULL常量来表示空指针,为什么C++11还要增加新的nullptr来表示空指针呢? 1,我们首先查看NULL的定义: #if defined (STDDEFH) || defined (need_NULL) undef NULL / in...

yepanl
2018/08/25
59
0
【漫游C++11】nullptr与std::nullptr_t

在C/C++中,有一个常用的宏:NULL。在C语言中,一般定义为((void*)0),也允许定义成0,在C++中,NULL必须是0。 即: #ifndef NULL #ifdef cplusplus #define NULL 0 // C++ #else #define NU...

风华神使
2015/12/06
1K
0
C++11新特性-引入关键字nullptr

引入nullptr的原因 引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NULL感到陌生。但是C和C++中的NULL却不等价。NULL表示指针不指向任何对象,但是问题在于,NULL不...

卓尔
2014/06/13
192
0
C++中的NULL和nullptr的区别

C的NULL 在C语言中,我们使用NULL表示空指针,也就是我们可以写如下代码: 实际上在C语言中,NULL通常被定义为如下: 也就是说NULL实际上是一个void 的指针,然后吧void 指针赋值给int 和foo...

dukeke
2018/01/08
0
0
Objective-C 中 NULL、nil、Nil、NSNull

NULL NULL 定义在 usr/include/sys/types/null.h 文件里: #ifndef NULL #define NULL DARWIN_NULL #endif / NULL / 其中 DARWINNULL 的定义在 usr/include/sys/_types.h 文件里,如下: #i......

tb_engineer
2016/12/20
9
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
2.7K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
3
0
用好项目管理工具,人人都可以成为项目经理

现在市面上的项目管理工具越来越多了,但是大多数都是一些协同工具或轻量项目管理工具。如果是多团队、跨部门使用或者企业级的项目管理,从管理思想到工具运用,需要适应企业的业务流程体系,...

cs平台
昨天
12
0
只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
69
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部