C++标准之NULL与nullptr比较

随着C++11标准的出现,C++的规范也越来越严谨,在减少语言二义性上,C++委员会确实做了很多努力。

在过去,我们如果要表示一个指针为空,我们条件反射肯定会这么写:

int *p = NULL;

然而啊,有没有想过这是有问题的,比如下面的这段代码:

#include <iostream>

#include <string>

using namespace std;

void func(int* num)

{

cout << "this is the ptr function..." << endl;

}

void func(int num)

{

cout << "this is the normal function..." << endl;

}

void main(int argc, char** argv)

{

func(NULL);

}

程序会输出什么?很多人的回答是:输出this is the ptr function…啊。其实啊,这里输出的是:

其实啊,在编译器进行解释程序时,NULL会被直接解释成0,所以这里的参数根本就不是大家所想的NULL,参数已经被编译器偷偷换成了0,0是整数啊,所以调用的是第二个函数。所以一些编程大师也建议将NULL换成0,这样可以减少后期维护的困难。但是我要怎么调用第一个函数呢?网上有很多解决办法(大多是利用之前的标准写的)。

C++11的出现彻底解决了这个问题,nullptr在C++11中就是代表空指针,不能被转换成数字(具体底层是怎么实现的,大家可以看看API),这次再试试,输出的结果如下图:

C++11标准之NULL与nullptr比较相关推荐

  1. c++11编码规范 NULL还是nullptr

    0和nullptr/NULL 至于指针(地址值),根据实际选择用0.NULL还是nullptr.对使用了C++11特性的项目,选用nullptr:对于C++03项目,推荐NULL,因为它像是一个指针 ...

  2. iOS开发-NULL和nullptr和nil和Nil还有NSNull

    2019独角兽企业重金招聘Python工程师标准>>> NULL和nullptr 在Clang 6.0 的stddef.h文件中可以找到NULL和nullptr的声明: 1 2 3 ...

  3. android ndk 编译c++11,Android NDK的C++11标准支持

    C++11在Android NDK中已经支持了,本文主要介绍如何在NDK中添加C++11标准的支持.android 在开源项目Cocos2d-x中,已经添加了C++11标准的支持.c++ 1.修改Ap ...

  4. NULL与nullptr

    传统意义上来说,c++把NULL.0视为同一种东西,有些编译器将NULL定义为 ((void*)0),有些将其定义为0. c++不允许直接将void*隐式的转化为其他类型,但是如果NULL被定义为 ( ...

  5. C++11标准下的单例设计模式

    单例设计模式 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 为什么会产生设计模式这样的东西呢? 使用设计模式的目的:为了代码可重用性.让代码 ...

  6. C语言-7月22日- NULL和nullptr的深入了解以及VScode对nullptr语句报错问题的解决

    目录 指针的非空判断问题: NULL和nullptr的替换问题: 这里我对于NULL的二义性问题有两个理解: 总结:如果你的编译器支持nullptr的话,尽量选择去使用nullptr而不是NULL. ...

  7. C语言nullptr错误,c/c++中的NULL,nullptr,0

    NULL,nullptr与0 0 NULL C语言中 C++中 隐式类型转换 nullptr 预处理中的条件编译语句 0 在我们的程序中,单纯一个0,在不同的类型中有着不同的意思 0,是一个空字符常量 ...

  8. c++11标准带来的最显著变化(及为何该引起你的注意)

    来源 :http://article.yeeyan.org/view/234235/250515 简介:自C++语言首次标准化以来,13年的时间过去了.前C++标准委员会成员, Danny Kalev ...

  9. INVALID_HANDLE_VALUE 、 NULL、nullptr 和 nullptr_t 的联系

    --------------------------------------------- -- 时间:2018-12-26 -- 创建人:Ruo_Xiao -- 邮箱:xclsoftware@163 ...

最新文章

  1. requirejs模块化html,requirejs模块化-入门
  2. 【算法学习笔记】43.动态规划 逆向思维 SJTU OJ 1012 增长率问题
  3. 9.5 程序示例--推荐系统-机器学习笔记-斯坦福吴恩达教授
  4. mysql增删改查脚本_脚本方式实现数据库增删改查
  5. ajax post提交特殊字符,如何利用jQuery post传递含特殊字符的数据
  6. Pytorch 实现 MLP
  7. java random array_java復習之Math、Random、Arrays工具類
  8. 【IDEA】IDEA 下一些 编码技巧
  9. 从BMW Vision iNEXT 看宝马如何进军自动驾驶 1
  10. 8运行不了_民航局暂停运行737max8,分析可能因为“它”导致飞机俯冲坠落
  11. 为 Retrofit2 提供的 FastJson 转换库
  12. C语言实现循环缓冲fifo及总结
  13. SpringBoot项目实现qq邮箱验证码登录
  14. 大型网站架构系列:电商网站架构案例
  15. matlab回文数,用Matlab求水花数-完美数-回文数和亲合数.doc
  16. linux下redis设置密码登录(简单易懂)
  17. 数学建模MathType输入平方的三种模式
  18. oracle占用io,解决 oracle IO占用率很高的问题
  19. 联想小新air15 2021 16G版魔改加装固态硬盘
  20. 让复选框实现单选功能

热门文章

  1. 11 怎么给字符串加索引
  2. 下面这些是什么意思:@classmethod, @staticmethod, @property?
  3. PHP中关于时间,时间戳 时区的设置问题
  4. HDU - 4422 The Little Girl who Picks Mushrooms
  5. js基础之---slice()
  6. C语言基础 - 输出1-100万之间的素数
  7. knewone最新分享购物网站模板
  8. 左连接、右连接、交叉连接、全外连接
  9. 高性能ORM 框架之 MySqlSugar
  10. Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置