当前位置: 首页 > news >正文

C++中的指针空值nullptr

一、nullptr的引入

在C++98中,通常是用NULL或者0对指针变量进行初始化

int* p1 = NULL;
int* p2 = 0;

NULL其实一个宏,本质是0,在传统C头文件stddef.h中给可以看到如下代码

#ifndef NULL
#ifdef __cplusplus
#define NULL   0
#else
#define NULL   ((void *)0)
#endif
#endif

可以看到,NULL本质上其实是字面常量0或者无类型指针(void*)的常量,所以在使用NULL时会遇到一些麻烦:

对于如下的两个重载函数,func(NULL)本意是调用第二个函数,结果却是调用了第一个函数

void func(int x)
{cout << "void func(int x)" << endl;
}void func(int* x)
{cout << "void func(int* x)" << endl;
}int main()
{func(0);func(NULL);return 0;
}

由此C++11中引入了关键字nullptr,可以使用nullptr来初始化指针变量,不会再发生上述问题

二、nullptr的细节

1.使用nullptr表示指针空值时,不需要包含头文件,因为nullptr时C++11作为新关键字引入的

2.在C++11中,sizeof(nullptr)与sizeof((void*)0)所占字节数相同

3.后续表示指针空值时,用nullptr替代NULL,提高代码的健壮性

http://www.lryc.cn/news/290670.html

相关文章:

  • 【Linux网络编程】网络编程套接字(1)
  • vite+ts+vue3打包的过程和错误
  • 80.双指针实现删除有序数组中的重复项 II(中等)-面试经典150题
  • 基于大数据的B站数据分析系统的设计与实现
  • 机器学习模型预测贷款审批
  • Linux实验记录:使用firewalld
  • Vue之初识Vue CLI 脚手架
  • [Tcpdump] 网络抓包工具使用教程
  • MongoDB常用命令
  • 强敌环伺:金融业信息安全威胁分析——整体态势
  • FreeRTOS简介
  • 51单片机点灯
  • sql注入之union联合注入
  • activiti解决实现ExecutionListener spring 自动注入@Autowired为null问题
  • 【Lazy ORM 整合druid 实现mysql监控】
  • 【Deeplabv3+】Ubutu18.04中使用pytorch复现Deeplabv3+第三步)-----CityscapesScripts生成自己的标签
  • 《动手学深度学习(PyTorch版)》笔记3.3
  • OpenGL ES 渲染 NV21、NV12 格式图像有哪些“姿势”?
  • P8813 [CSP-J 2022] 乘方 题解
  • Ubuntu 常用命令、docker 常用命令、unzip常用命令、tar常用命令
  • 保护医疗数据不受威胁:MPLS专线在医疗网络安全中的角色
  • Java面试题夺命连环问
  • 华为策略路由+NQA配置
  • 逆置字符串
  • 第九节HarmonyOS 常用基础组件14-DataPanel
  • Vue开发之proxy代理的配置(附带uniapp代理配置)
  • 【数据分享】2023年我国省市县三级的公司企业数量(21类公司企业/Excel/Shp格式)
  • 6JS对象
  • 粒子群算法求解港口泊位调度问题(MATLAB代码)
  • idea控制台出现乱码的解决方案