NULL 和nullptr
在阅读李同学(看不懂啊啊啊啊啊)的代码时,发现李同学空指针不是用NULL而是用nullptr,于是好奇啊好奇,有啥区别捏?
打开scdn 找到了个能看懂的
nullptr的出现是为了解决NULL表示空指针在C++中具有二义性的问题。
C中,NULL通常被定义为:
#denfine NULL((void*)0)
所以说NULL实际上是一个空指针,如果在C语言中写下以下代码,编译无问题
int* i=NULL;
char* pc=NULL;
因为C语言中把空指针赋给int和char指针的时候,发生了隐式类型转换,把void指针转换成了相应类型的指针。
但是C++是强制型语言,void*是不能隐式转换成其他类型指针的,所以编译器提供的头文件做了相应类型的处理:
#ifdef _cplusplus
#define NULL 0
#else
#define NULL((void*)0)
#endif
可见,C++中 NULL实际是0,因为C++中不能把void*类型的指针隐式转换成其他类型的指针,所以为了结果空指针的表示问题,引入了0表示空指针
但是实际上,用NULL代替0表示空指针在函数重载时会出现问题,如下:
#include<iostream>
using namespace std;
void func(void* i)
{
cout<<”func1”<endl;
}
void func(int i)
{
cout<<”func2”<<endl;
}
void main(int argc, char* argv[])
{
func(NULL);
func(nullptr);
getchar();
}
结果为:
func2
func1
这段代码我们对函数func进行重载,参数分别是void*类型和int类型,但是运行结果却与我们使用NULL的初衷是相违背的,因为我们本来是想用NULL代表空指针,但是在将NULL输入到函数中,他却选择了int形参这个函数版本。所以是有问题的,这就是NULL代替空指针在C++中的二义性。
总结:
NULL在C++中就是0,建议以后还是都用nullptr表示空指针,而NULL就当0用。
学习来源:https://blog.csdn.net/qq_18108083/article/details/84346655?spm=1001.2101.3001.6650.13&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-13-84346655-blog-51249555.pc_relevant_multi_platform_whitelistv5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-13-84346655-blog-51249555.pc_relevant_multi_platform_whitelistv5&utm_relevant_index=16
NULL 和nullptr相关推荐
- [C++] NULL VS nullptr
NULL VS nullptr 转载于:https://www.cnblogs.com/tianhangzhang/p/4945623.html
- iOS开发-NULL和nullptr和nil和Nil还有NSNull
2019独角兽企业重金招聘Python工程师标准>>> NULL和nullptr 在Clang 6.0 的stddef.h文件中可以找到NULL和nullptr的声明: 1 2 3 ...
- INVALID_HANDLE_VALUE 、 NULL、nullptr 和 nullptr_t 的联系
--------------------------------------------- -- 时间:2018-12-26 -- 创建人:Ruo_Xiao -- 邮箱:xclsoftware@163 ...
- const对象,NULL和nullptr,C++中创建对象数组
1.定义成了const之后的类 #include <iostream> class area { public:int x;int y;mutable int z; //不受cons ...
- c++11编码规范 NULL还是nullptr
0和nullptr/NULL 至于指针(地址值),根据实际选择用0.NULL还是nullptr.对使用了C++11特性的项目,选用nullptr:对于C++03项目,推荐NULL,因为它像是一个指针 ...
- C++11标准之NULL与nullptr比较
C++标准之NULL与nullptr比较 随着C++11标准的出现,C++的规范也越来越严谨,在减少语言二义性上,C++委员会确实做了很多努力. 在过去,我们如果要表示一个指针为空,我们条件反射肯定会 ...
- NULL与nullptr
传统意义上来说,c++把NULL.0视为同一种东西,有些编译器将NULL定义为 ((void*)0),有些将其定义为0. c++不允许直接将void*隐式的转化为其他类型,但是如果NULL被定义为 ( ...
- C语言-7月22日- NULL和nullptr的深入了解以及VScode对nullptr语句报错问题的解决
目录 指针的非空判断问题: NULL和nullptr的替换问题: 这里我对于NULL的二义性问题有两个理解: 总结:如果你的编译器支持nullptr的话,尽量选择去使用nullptr而不是NULL. ...
- C++中NULL和nullptr的区别
在编写C程序的时候只看到过NULL,而在C++的编程中,我们可以看到NULL和nullptr两种关键字,其实nullptr是C++11版本中新加入的,它的出现是为了解决NULL表示空指针在C++中具有 ...
最新文章
- 50位全球专家畅谈人工智能治理进程——结伴前行,合作共赢(附下载)
- 机器人 陆梅东_机器人知识与实践比赛获奖 - 上海徐汇区青少年活动中心
- 如何确定SharePoint 2007的一次增量爬网会处理多少条更新呢?
- JavaScript核心参考手册.chm
- Eclipse 安装配置指南
- Leetcode 6.Z 字形变换 (每日一题 20210630)
- 十分钟快速了解 ES6 Promise
- MySQL、MongoDB、列数据库的区别及应用场景
- Coursera自动驾驶课程第10讲:Feedforward Neural Networks
- Oracle PL/SQL块 多表查询(emp员工表、dept部门表、salgrade工资等级表)
- Mongodb定时备份脚本和清除脚本
- 一张图带你了解-常见面试之JUC包详解
- Vue计算属性的_set与get方法_实现双向数据传递---vue工作笔记0006
- lambdapython语法_Python中lambda表达式的语法与应用
- linux+读取初始化文件,Linux 初始化系统 SystemV Upstart
- 选择物联网卡平台时需要重点考虑的标准
- 科技部领衔发布中国新一代AI发展报告:中美成全球AI网络核心节点
- 华为发布鸿蒙Beta版公测,华为推出鸿蒙OS 2.0手机开发者Beta版:P40、Mate 30系列可申请公测...
- codeforces1299B Aerodynamic
- 在 AWS上域名备案流程和文件