NULL和nullptr到底是什么?它们的区别又是什么?

目录

1.前言

2.剖析NULL

3. 剖析nullptr

4.nullptr与NULL的区别


1.前言

为了保持良好的编程习惯,我们在声明某个变量时都应该给这个变量合适的初始值,不然容易出现不可预知的错误。对于指针来说更是如此,在c语言中我们就通常将暂时没有指向的指针置为NULL.

2.剖析NULL

NULL 是一个宏,通常被用来表示空指针。在C和C++的早期版本中,NULL 通常被定义为0或者((void*)0),用于表示一个无效或未初始化的指针。

在传统的C头文件(stddef.h)中,可以看到如下代码

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

程序本意是想通过f(NULL)调用指针版本的f(int*)函数,但是由于NULL被定义成0,因此与程序的初衷相悖。字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void*)0。

3. 剖析nullptr

nullptr 是 C++11 标准引入的新关键字,具有独立的类型 std::nullptr_t,用于表示空指针,不能被隐式转换为其他类型(nullptr本身就是一个唯一的类型)。它是为了解决使用 NULL 宏在某些情况下可能导致的类型不明确、歧义或安全性问题而引入的。

4.nullptr与NULL的区别

下面是 nullptrNULL 的主要区别:

  1. 类型安全:

    • nullptr 是一个特殊的空指针常量,具有独立的类型 std::nullptr_t。这使得 nullptr 在类型安全性方面更可靠,因为它不能被隐式转换为其他类型。
    • NULL 实际上是一个宏,通常被定义为 0((void*)0)。因此,NULL 在一些情况下可能会发生隐式类型转换,导致潜在的问题。
  2. 可读性:

    • nullptr 更加明确地表示空指针的概念,使代码更易读,更容易理解。
    • NULL 可能在某些上下文中引起歧义,因为它只是一个宏,其实际值可以是 0 或其它。
  3. 重载决议:

    • 如果一个函数有重载版本,其中一个接受指针类型的参数,使用 nullptr 可以避免重载决议的歧义问题。因为 nullptr 有独立的类型,可以更容易地选择正确的重载版本。
    • NULL 在某些情况下可能导致重载决议的不确定性。

nullptr与NULL的区别同样也是nullptr的优势,在日常编程中我们也应当多使用nullptr.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/683702.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Spring MVC篇】返回响应

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Spring MVC】 本专栏旨在分享学习Spring MVC的一点学习心得,欢迎大家在评论区交流讨论💌 目录 一、返回静态页面…

(13)Hive调优——动态分区导致的小文件问题

前言 动态分区指的是:分区的字段值是基于查询结果自动推断出来的,核心语法就是insertselect。 具体内容指路文章: https://blog.csdn.net/SHWAITME/article/details/136111924?spm1001.2014.3001.5501文章浏览阅读483次,点赞15次…

如何买卖基金

一、从哪买卖? (一)购买渠道 有两种购买渠道:直销平台和代销平台。 1.直销平台 就是基金公司。 每个基金公司只能卖自家基金产品。比如招商基金只能卖招商基金管理的基金,而不能卖广发基金的产品。 如何去基金公司购…

2024年最新onlyfans虚拟信用卡订阅教程

一、Onlyfans是什么? OnlyFans是一个允许创作者分享自己的独家内容的平台,简称o站。这个平台允许创作者创建一个订阅服务,粉丝需要支付费用才能访问其独家内容。 本文将教你如何使用虚拟卡在OnlyFans上进行充值。 二、如何使用虚拟卡支付 O…

变形金刚:第 2 部分:变形金刚的架构

目录 一、说明 二、实现Transformer的过程 第 1 步:代币化(Tokenization) 第 2 步:对每个单词进行标记嵌入 第 3 步:对每个单词进行位置嵌入 第 4 步:输入嵌入 第 5 步:编码器层 2.5.1 多头自注…

【MySQL】高度为2和3时B+树能够存储的记录数量的计算过程

文章目录 题目答案高度为2时的B树高度为3时的B树总结 GPT4 对话过程 题目 InnoDB主键索引的Btree在高度分别为 2 和 3 时,可以存储多少条记录? 答案 高度为2时的B树 计算过程: 使用公式 ( n 8 ( n 1 ) 6 16 1024 ) (n \times 8 …

二维数组及函数的非函数实现

2024年2月14日 1.请编程实现二维数组的杨慧三角 #include<stdio.h> #include<stdlib.h> #include<string.h> void Yanghui(int n,int (*p)[n]) {for(int i0;i<n;i){for(int j0;j<i;j){if(j0||ij){*(*(pi)j)1;}else{*(*(pi)j)*(*(pi-1)j-1)*(*(pi-1)j)…

相机图像质量研究(15)常见问题总结:光学结构对成像的影响--暗角

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

456. 车站分级(拓扑排序,虚拟点建图)

活动 - AcWing 一条单向的铁路线上&#xff0c;依次有编号为 1, 2, …, n1,  的 n 个火车站。 每个火车站都有一个级别&#xff0c;最低为 1 级。 现有若干趟车次在这条线路上行驶&#xff0c;每一趟都满足如下要求&#xff1a;如果这趟车次停靠了火车站 x&#xff0c;…

Elasticsearch:特定领域的生成式 AI - 预训练、微调和 RAG

作者&#xff1a;来自 Elastic Steve Dodson 有多种策略可以将特定领域的知识添加到大型语言模型 (LLM) 中&#xff0c;并且作为积极研究领域的一部分&#xff0c;正在研究更多方法。 对特定领域数据集进行预训练和微调等方法使 LLMs 能够推理并生成特定领域语言。 然而&#…

【深入理解DETR】DETR的原理与算法实现

1 DETR算法概述 ①端到端 ②Transformer-model 之前的方法都需要进行NMS操作去掉冗余的bounding box或者手工设计anchor&#xff0c; 这就需要了解先验知识&#xff0c;增加从超参数anchor的数量&#xff0c; 1.1 训练测试框架 一次从图像中预测n个object的类别 训练阶段我们…

Attention Is All Your Need论文翻译

0.摘要 这个统治序列转换模型是基于复杂循环或者卷积神经网络&#xff0c;它包含编码器和解码器。表现最好的模型也通过注意力机制来连接编码器和解码器。我们提出了一个新的简单网络架构——Transformer,它仅仅是是基于注意力机制&#xff0c;完全免去递推和卷积。在两个机器…

C语言——函数(第五讲)(上)

C语言——函数&#xff08;第五讲&#xff09; 前言函数的概念库函数标准库和库函数库函数的使用方法 ⾃定义函数形式形参和实参形参和实参的关系 前言 Hello,各位C语言的小伙伴们&#xff0c;大家过年好&#xff0c;我是莹莹。停更差不多一个月了&#xff0c;都是懒惰作怪&am…

9 个管理 Windows 硬盘的最佳免费磁盘分区软件 [2024 排名]

管理分区可能是一项具有挑战性的任务。当您想到删除、缩小、移动、磁盘分区或合并分区等方面时&#xff0c;您会认为它们是很难做到的事情。然而&#xff0c;虽然 Windows 自己的磁盘管理可以处理大部分问题&#xff0c;但它无法处理管理分区的所有方面。 这时候优质的磁盘管理…

python-游戏篇-初级-超级画板

文章目录 开发环境要求运行方法PyCharmVScode 代码main.pytools.py 效果 开发环境要求 本系统的软件开发及运行环境具体如下。 操作系统&#xff1a;Windows 7、Windows 10。Python版本&#xff1a;Python 3.7.1。开发工具&#xff1a;PyCharm 2018。Python内置模块&#xff…

秒懂百科,C++如此简单丨第十九天:动态规划

目录 动态规划的初步理解 求最短路径数 洛谷 P1002 过河卒 题目描述 输入样例 输出样例 思路 AC Code 动态规划的初步理解 什么是动态规划&#xff1f;最直白的理解就是动态的规划。 那高级一点的理解呢&#xff1f;就是每时每刻都拿着一个小本本&#xff0c;也就是…

「优选算法刷题」:和可被K整除的子数组

一、题目 给定一个整数数组 nums 和一个整数 k &#xff0c;返回其中元素之和可被 k 整除的&#xff08;连续、非空&#xff09; 子数组 的数目。 子数组 是数组的 连续 部分。 示例 1&#xff1a; 输入&#xff1a;nums [4,5,0,-2,-3,1], k 5 输出&#xff1a;7 解释&…

C语言-----函数功能实现---strcpystrlen

1.函数功能参数介绍 该函数的功能就是把一个字符串复制到另外的一个数组&#xff0c;包括\0&#xff1b; 2.首先我们要明确字符串的复制也是包括最后的\0的&#xff1b; void mystrcpy(char* dest, char* src) {while (*src!\0){*dest *src;dest;src;}*dest *src;} int mai…

HGAME 2024 WEEK2 WP

文章目录 WEBWhat the cow say?Select More Coursesmyflask CryptomidRSAmidRSA revengebackpackbackpack revengebabyRSA奇怪的图片plus MISC我要成为华容道高手ek1ng_want_girlfriendezWord龙之舞 回老家了&#xff0c;初七晚上才回去&#xff0c;估计week3前几天不怎么能做…