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

NULL—0—nullptr 三者关系

1.概述

NULL,0,nullptr值都是0,但是类型不同,但是由于C头文件中NULL定义宏混乱,可能是int 0,也可能是(void*)0;

所以在C++11及以后的标准中引入新的空指针nullptr,nullptr就是(void*)0,所以在C++中空指针统一用nullptr。

2.NULL的详细解释

NULL 实际是一个宏,在传统的 C 头文件 (stddef.h) 中,可以看到如下代码:

#ifndef NULL

#ifdef __cplusplus

#define NULL 0

#else

#define NULL  ((void *)0)

#endif

#endif

可以看到,NULL可能被定义为字面常量0,或者被定义为无类型指针(void*)的常量。不论采取何种定义,在 使用空值的指针时,都不可避免的会遇到一些麻烦;

利用函数重载证明NULL和0是是整形0,nullptr是(void*)0:

void f(int) {

    qDebug() << "f(int)" ;

}

void f(int*) {

    qDebug() << "f(int*)";

}

int main()

{

f(0);        //调用了void f(int)

//f(NULL);     //调用了void f(int)   //QT6中调用出错

f(nullptr);  //调用了void f(int*)

return 0;

}

3.nullptr说明

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

(2)在 C++11 中, sizeof(nullptr) 与 sizeof((void*)0) 所占的字节数相同。如:QT 64位编译程序为:8,8;QT 32位编译程序为:4,4

(3)为了提高代码的健壮性,在C++中表示指针空值时建议最好使用 nullptr 。

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

相关文章:

  • Nginx 请求的 匹配规则 与 转发规则
  • OWASP发布10大开源软件风险清单
  • 大学生前端学习第一天:了解前端
  • 公安机关人民警察证照片采集规范及自拍制作电子版指南
  • 使用Python插入100万条数据到MySQL数据库并将数据逐步写出到多个Excel
  • 【备忘录】openssl记录
  • hadoop编程之工资序列化排序
  • OpenXR手部跟踪接口与VIVE OpenXR扩展详细解析
  • 慎投!5本On Hold全被剔除!新增9本SCI/SSCI被除名!4月WOS更新
  • 华为云CodeArts IDE For Python 快速使用指南
  • C# 截图并保存为图片
  • [html]一个动态js倒计时小组件
  • Hive-Sql复杂面试题
  • WPS二次开发系列:WPS SDk功能就概览
  • 华为OD-C卷-结队编程[200分]
  • 连连看游戏页面网站源码,直接使用
  • 在 Kubernetes 1.24 中使用 Docker:配置与应用指南
  • Canvas使用详细教学:从基础绘图到进阶动画再到实战(海报生成、Flappy Bird 小游戏等),掌握绘图与动画的秘诀
  • 【MATLAB 分类算法教程】_2粒子群算法优化支持向量机SVM分类 - 教程和对应MATLAB代码
  • Vue2电商前台项目(三):完成Search搜索模块业务
  • 算法思想总结:链表
  • Android Room 记录一个Update语句不生效的问题解决记录
  • 使用SpringBoot3+Vue3开发公寓管理系统
  • 有且仅有的10个常见的排序算法,东西不多,怎么就背不下来呢
  • Mac安装配置ElasticSearch和Kibana 8.13.2
  • javaWeb项目-快捷酒店管理系统功能介绍
  • 闲不住,手写一个数据库文档生成工具
  • 在群晖上安装GPT4Free
  • C# 语言类型(四)—传递参数及其修饰符
  • 刷穿力扣006-剑指offer一数组——02寻找目标值-二维数组