C++11标准之NULL与nullptr比较
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比较相关推荐
- c++11编码规范 NULL还是nullptr
0和nullptr/NULL 至于指针(地址值),根据实际选择用0.NULL还是nullptr.对使用了C++11特性的项目,选用nullptr:对于C++03项目,推荐NULL,因为它像是一个指针 ...
- iOS开发-NULL和nullptr和nil和Nil还有NSNull
2019独角兽企业重金招聘Python工程师标准>>> NULL和nullptr 在Clang 6.0 的stddef.h文件中可以找到NULL和nullptr的声明: 1 2 3 ...
- android ndk 编译c++11,Android NDK的C++11标准支持
C++11在Android NDK中已经支持了,本文主要介绍如何在NDK中添加C++11标准的支持.android 在开源项目Cocos2d-x中,已经添加了C++11标准的支持.c++ 1.修改Ap ...
- NULL与nullptr
传统意义上来说,c++把NULL.0视为同一种东西,有些编译器将NULL定义为 ((void*)0),有些将其定义为0. c++不允许直接将void*隐式的转化为其他类型,但是如果NULL被定义为 ( ...
- C++11标准下的单例设计模式
单例设计模式 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结. 为什么会产生设计模式这样的东西呢? 使用设计模式的目的:为了代码可重用性.让代码 ...
- C语言-7月22日- NULL和nullptr的深入了解以及VScode对nullptr语句报错问题的解决
目录 指针的非空判断问题: NULL和nullptr的替换问题: 这里我对于NULL的二义性问题有两个理解: 总结:如果你的编译器支持nullptr的话,尽量选择去使用nullptr而不是NULL. ...
- C语言nullptr错误,c/c++中的NULL,nullptr,0
NULL,nullptr与0 0 NULL C语言中 C++中 隐式类型转换 nullptr 预处理中的条件编译语句 0 在我们的程序中,单纯一个0,在不同的类型中有着不同的意思 0,是一个空字符常量 ...
- c++11标准带来的最显著变化(及为何该引起你的注意)
来源 :http://article.yeeyan.org/view/234235/250515 简介:自C++语言首次标准化以来,13年的时间过去了.前C++标准委员会成员, Danny Kalev ...
- INVALID_HANDLE_VALUE 、 NULL、nullptr 和 nullptr_t 的联系
--------------------------------------------- -- 时间:2018-12-26 -- 创建人:Ruo_Xiao -- 邮箱:xclsoftware@163 ...
最新文章
- requirejs模块化html,requirejs模块化-入门
- 【算法学习笔记】43.动态规划 逆向思维 SJTU OJ 1012 增长率问题
- 9.5 程序示例--推荐系统-机器学习笔记-斯坦福吴恩达教授
- mysql增删改查脚本_脚本方式实现数据库增删改查
- ajax post提交特殊字符,如何利用jQuery post传递含特殊字符的数据
- Pytorch 实现 MLP
- java random array_java復習之Math、Random、Arrays工具類
- 【IDEA】IDEA 下一些 编码技巧
- 从BMW Vision iNEXT 看宝马如何进军自动驾驶 1
- 8运行不了_民航局暂停运行737max8,分析可能因为“它”导致飞机俯冲坠落
- 为 Retrofit2 提供的 FastJson 转换库
- C语言实现循环缓冲fifo及总结
- SpringBoot项目实现qq邮箱验证码登录
- 大型网站架构系列:电商网站架构案例
- matlab回文数,用Matlab求水花数-完美数-回文数和亲合数.doc
- linux下redis设置密码登录(简单易懂)
- 数学建模MathType输入平方的三种模式
- oracle占用io,解决 oracle IO占用率很高的问题
- 联想小新air15 2021 16G版魔改加装固态硬盘
- 让复选框实现单选功能
热门文章
- 11 怎么给字符串加索引
- 下面这些是什么意思:@classmethod, @staticmethod, @property?
- PHP中关于时间,时间戳 时区的设置问题
- HDU - 4422 The Little Girl who Picks Mushrooms
- js基础之---slice()
- C语言基础 - 输出1-100万之间的素数
- knewone最新分享购物网站模板
- 左连接、右连接、交叉连接、全外连接
- 高性能ORM 框架之 MySqlSugar
- Hadoop-2.2.0中文文档——MapReduce 下一代 -——集群配置