在Clang 6.0 的stddef.h文件中可以找到NULL和nullptr的声明:

早在1972年,C语言诞生的初期,常数0带有常数及空指针的双重身分。 C使用preprocessor macro NULL表示空指针,让NULL及0分别代表空指针及常数0。 NULL可被定义为((void*)0)或是0。

C++并不采用C的规则,不允许将void*隐式转换为其他类型的指针。为了使代码char* c = NULL;能通过编译,NULL只能定义为0。这样的决定使得函数重载无法区分代码的语义:

C++建议NULL应当定义为0,所以foo(NULL);将会调用foo(int),这并不是程序员想要的行为,也违反了代码的直观性。0的歧义在此处造成困扰。

C++11引入了新的关键字来代表空指针常数:nullptr,将空指针和整数0的概念拆开。 nullptr的类型为nullptr_t,能隐式转换为任何指针或是成员指针的类型,也能和它们进行相等或不等的比较。而nullptr不能隐式转换为整数,也不能和整数做比较。

为了向下兼容,0仍可代表空指针常数。

PS:__MINGW32__是MinGW编译器的预定义宏。_MSC_VER是微软C/C++编译器——cl.exe 编译代码时预定义的一个宏。_MSC_VER的值表示cl的版本。需要针对cl特定版本编写代码时,也可以使用该宏进行条件编译。

c语言null和nullptr,NULL和nullptr相关推荐

  1. R语言dim函数返回NULL

    R语言dim函数返回NULL 目录 R语言dim函数返回NULL 问题: 解决: dim函数可以返回dataframe.maitrix的shape; 一个常见的错误是将dim应用于一维向量或数组. 问 ...

  2. R语言并行计算 deviation of null beta diversity(beta多样性零偏差)

      群落构建分析是微生物生态学分析的重要组成部分,成为目前文章发表的热点技术.之前我们介绍了计算beta-NTI(beta nearest taxon index)来进行群落构建分析(https:// ...

  3. C语言之——void和NULL

    一.void (1)void用于函数声明 没有返回值的函数,其类型为 void void perror( const char * ); 参数列表中的关键字 void 表示该函数没有参数 FILE * ...

  4. iOS——nil、Nil、NULL和[NSNull null]的区别

    iOS--nil.Nil.NULL和[NSNull null]的区别 首先我们先来看一下苹果文档上的解释: nil:Defines the id of a null instance.(定义空实例的i ...

  5. Java的if判断对象为null时,null放在比较运算符的左边还是右边较好?

    如java中:if(name == null)和if(null == name)有什么讲究吗? 答:在java里面,它们是一样的.但是通常写为null == name.这其实是在C语言里面引申出来的. ...

  6. java中的null类型---有关null的9件事

    摘自 https://blog.csdn.net/qq_25077777/article/details/80174763 今天听到一个问题,java中的null类型,null竟然是一种类型 java ...

  7. java null 写前面_java中判断对象为null时,null在前面还是后面

    因为目前只学习并使用java语言,所以这里主要是根据java来说的 Java中对null进行判断放在前后没有什么区别,只是为了代码规范,为了避免写代码时书写错误. 下面面两个测试Demo都没有报错.n ...

  8. Mysql探究之null与not null

    相信很多用了mysql很久的人,对这两个字段属性的概念还不是很清楚,一般会有以下疑问: 1.我字段类型是not null,为什么我可以插入空值 2.为毛not null的效率比null高 3.判断字段 ...

  9. Shell中的/dev/null 21 与 21 /dev/null 与/dev/null 的区别

    转自:http://blog.csdn.net/reyleon/article/details/11595985 默认情况下,总是有三个文件处于打开状态,标准输入(键盘输入).标准输出(输出到屏幕). ...

  10. CreateEvent(NULL,TRUE,FALSE,NULL);的解释

    它用来创建或打开一个命名的或无名的事件对象 初始化为: m_hReadEvent=CreateEvent(NULL,TRUE,FALSE,NULL); 1.,确定返回的句柄是否可被子进程继承.如果lp ...

最新文章

  1. CLI4 去掉严格模式
  2. 初识 Vue(18)---(非父子组件间的传值)
  3. springboot 打jar 包部署时 读取外部配置文件
  4. 【Python CheckiO 题解】Bird Language
  5. 【Java】 大话数据结构(1) 线性表之顺序存储结构
  6. 教你如何在项目中集成推送功能
  7. 程序员的时间管理哲学——打造自己的分时管理系统
  8. 2018年入门python,推荐这样几本好书!
  9. 咱也写个小写数字转大写金额 ,纯粹字符串操作实现
  10. java重构三部曲,建构·解构·重构——漫谈批注式阅读三部曲
  11. 桩身弹性压缩计算公式_压缩弹簧弹力的计算公式
  12. Win10自带超级截屏利器
  13. 201671030118 词频统计软件项目报告
  14. 学习笔记_循环语句的嵌套
  15. 给 perl hacker 们看的(ReShip)
  16. 如何将pdf修改编辑
  17. (转)tensorflow入门教程(二十六)人脸识别(上)
  18. jQuery日期插件
  19. 说说谢霆锋的音乐创作[转]
  20. 更改图像长宽 厘米为单位

热门文章

  1. 重邮计算机专业国际排名,重庆高校新排名:重邮冲入5强阵营,川外退出前10,你高校排第几...
  2. 如何查看端口被哪个进程占用(Windows/Linux)
  3. zookeeper知识点扫盲
  4. 设计循环队列(LeetCode:622.设计循环队列)
  5. 【多元统计分析】19.因子分析
  6. BZOJ[1696][Usaco2007 Feb]Building A New Barn新牛舍 贪心
  7. 【科研技巧】根据研究方向查看可投稿期刊或根据数据库收录查看可投稿期刊
  8. 建筑工地安全标语(建筑工地安全标语大全)
  9. c语言 结构体 初始化,C语言结构体初始化
  10. 第一站仿小红书图片裁剪控件,深度解析大厂炫酷控件