【CPP】NULL nullptr

news2024/11/20 14:17:31

文章目录

  • NULL
  • nullptr
  • 总结
  • Ref.

NULL

在C++中,NULL实际上是0.因为C++中不能把void*类型的指针隐式转换成其他类型的指针(cpp是强类型语言),所以为了解决空指针的表示问题,C++引入了0来表示空指针,这样就有了上述代码中的NULL宏定义。
在C++中,NULL不过也是0罢了,把它当成空指针只是一个无可奈何的选择罢了。
C++中,任何指针类型可以隐式转换转换为void *,反过来则必须强制转换。为了支持函数重载,这种隐式转换就不能是双向的,严格来讲,单向也不应该允许。
在这里插入图片描述

但是 C++ 还是尽可能兼容 C 语言,允许其他类型隐式转换为void *类型。

nullptr

nullptr并非整型类别,甚至也不是指针类型,但是能转换成任意指针类型。nullptr的实际类型是std:nullptr_t。
二义性实例:

#include<iostream>
using namespace std;
void test(void *p)
{
    cout<<"p is pointer "<<p<<endl;
}
void test(int num)
{
    cout<<"num is int "<<num<<endl;
}
int main(void)
{

    test(NULL);
    return 0;
}

因为NULL就是0,所以编译报错,提示有二义性。
但如果使用test(nullptr)就不会报错

总结

一句话版:为了解决NULL表示空指针在C++中具有二义性,引入nullptr。

C语言中void*可以和任意指针类型之间隐式转换,但是C++是强类型语言,任何指针类型可以隐式转换成void*,但是反过来不行,所以把NULL定义成0,表示空指针。但是这又会导致重载的二义性,所以引入了nullptr来表示空指针。

为了支持重载,不允许void *隐式转换为其他指针类型,因而必须将NULL定义为0。
为了支持重载,NULL和0必须区分开来,因此引入了nullptr。

C++11中才引入nullptr

Ref.

  1. https://blog.csdn.net/qq_18108083/article/details/84346655
  2. https://zhuanlan.zhihu.com/p/79883965
  3. https://www.zhihu.com/question/55936870

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

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

相关文章

Python 爬虫(七):pyspider 使用

1 简介 pyspider 是一个支持任务监控、项目管理、多种数据库&#xff0c;具有 WebUI 的爬虫框架&#xff0c;它采用 Python 语言编写&#xff0c;分布式架构。详细特性如下&#xff1a; 拥有 Web 脚本编辑界面&#xff0c;任务监控器&#xff0c;项目管理器和结构查看器&#…

chatgpt赋能Python-python3_8_6怎么用

Python 3.8.6 全面介绍及使用指南 Python是一种高级编程语言&#xff0c;广泛应用于Web开发、数据科学、人工智能等领域。Python 3.8.6是Python 3.x系列的最新版本&#xff0c;在性能、稳定性、开发效率等方面有了重大的提升。本文将对Python3.8.6进行全面介绍&#xff0c;并给…

【野火启明_瑞萨RA6M5】梦的开始 ---- 点灯(FSP库)

文章目录 一、FSP配置二、hal_entry入口函数三、封装 LED 设备驱动程序下载验证 一、FSP配置 对于 Keil 开发环境&#xff1a; 拷贝一份之前的 Keil 工程模板 “06_Template”&#xff0c; 然后将工程文件夹重命名为 “11_GPIO_LED”&#xff0c;并进入该文件夹里面双击 Keil …

2023关于ES中的数据聚合相关操作

1.ES数据聚合 聚合(aggregation)可以实现对文档数据的统计、分析、运算。聚合常见有三大类。 桶(Bucket)聚合&#xff1a;用来对文档做分组 常用的方法 语句描述TermAggregation按照文档字段值分组Date Histogram按照日期阶梯分组&#xff0c;列如一周或一月为一组 度量(Me…

【走进Linux的世界】Linux---基本指令(1)

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【Linux专栏】&#x1f388; 本专栏旨在分享学习Linux的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 ls指令pwd指令…

IS420UCSBH4A 用于高速应用中的Mark VIe系列

控制器IS420UCSBH4A由通用电气公司设计&#xff0c;用于高速应用中的Mark VIe系列&#xff0c;采用1066 MHz EP80579英特尔处理器。该控制器可与Mark VIe系列一起用于EX2100e和LS2100e应用。 IS420UCSBH4A技术规格 系列马克维处理机类型1066兆赫EP80579英特尔型号IS420UCSBH4A…

chatgpt赋能Python-python3_8_5怎么打开

Python3.8.5 是如何打开的&#xff1f; Python3.8.5 是近期发布的 Python 编程语言的一个版本&#xff0c;它具有很多新的功能和性能的改进。对于想要学习或者使用 Python3.8.5 的人&#xff0c;本文将介绍如何打开 Python3.8.5 环境。 步骤1&#xff1a;下载 Python3.8.5 首…

chatgpt赋能Python-python3_8怎么用

Python 3.8是什么&#xff1f; Python 3.8是一种编程语言版本&#xff0c;是在2019年10月发布的&#xff0c;它提供了许多新的功能和改进&#xff0c;其中包括优化的性能、新的语法糖&#xff0c;以及一些新的标准库模块&#xff0c;使Python 3.8成为了Python 3.x系列中最受欢…

你可能不需要担心,AI对你的工作造成威胁:万字长文解读科技革命与人类发展

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 上周&#xff0c;AI似乎成为全互联网的焦点了。谷歌在2023IO开发者大会上&#xff0c…

chatgpt赋能Python-python3_8怎么换行

Python是一种高级编程语言&#xff0c;其易用性和简洁语法深受程序员的喜爱。而在Python中&#xff0c;换行是一项必不可少的操作。今天&#xff0c;我们将介绍如何在Python3.8中进行换行&#xff0c;并提供一些有用的技巧。 Python3.8中的换行操作 在Python中&#xff0c;我…

一星期学sql day1

文章目录 了解部分&#xff08;详细部分google一下&#xff09;mysql的下载和安装mysql的启动MySQL的客户端的链接MySQL数据模型sql的通用语法sql 分类DDL&#xff1a;数据定义语言表操作数值类型字符串类型日期时间类型 DML&#xff08;数据操作语言&#xff09;添加数据 了解…

微信小程序 Vue+uniapp电脑手机笔记本预约维修系统 java python

系统具有专门的供用户使用的前台和专门供管理人员使用的后台。 前台用户使用小程序&#xff0c;后台信息处理使用基 MySql进行管理﹔通过后台添加手机信息、管理用户信息、管理预约信息﹔前台用户通过小程序登录&#xff0c;查看维修信息、发起预约。 管理员后端&#xff1b;首…

mysql入门(二)——函数与约束

mysql入门——函数与约束 mysql中的函数字符串函数字符串函数的基本应用 数值函数日期函数流程函数 约束概述约束的演示外键约束建立外键关联&#xff1a;删除外键外键的删除/更新行为为什么要采取外键约束 mysql中的函数 之前我们介绍过聚合函数&#xff0c;在MySQL中&#x…

chatgpt赋能Python-python3_7字体大小调整

Python3.7字体大小调整指南 您是否在使用Python3.7时遇到字体大小问题&#xff1f;本文将为您提供一份全面的Python3.7字体大小调整指南&#xff0c;帮助您轻松解决这一问题。 什么是字体大小问题 字体大小问题指的是当我们在使用Python3.7编辑器时&#xff0c;发现字体太小…

chatgpt赋能Python-python3_8字体大小

Python3.8 字体大小对程序员的重要性 在编写 Python 代码时&#xff0c;设置字体大小可能是最基本的操作之一&#xff0c;特别是对于长期进行编码工作的程序员来说。Python 3.8 为程序员提供了更好的字体调节能力&#xff0c;可以将字体大小设置为适合自己的大小&#xff0c;使…

chatgpt赋能Python-python3_9_4怎么用

介绍 Python是目前最为流行的编程语言之一&#xff0c;用途非常广泛&#xff0c;可以应用于各个领域。Python 3.9.4是Python最新版本&#xff0c;其中包含了很多新功能和改进&#xff0c;让Python编程更加简单和高效。 此文将解释Python 3.9.4的一些主要的功能&#xff0c;以…

JAVA-SE-异常

在JAVA中&#xff0c;将程序执行过程中发生的不正常行为称为异常。简单来说就是我们在运行或编译一段代码时所报的错误。 一&#xff0c;异常的体系结构 在JAVA中不同类型的异常&#xff0c;都有与其对应的类来进行描述。 …

实验三、数据高级查询实验

实验名称&#xff1a;实验3 数据高级查询实验 实验目的和要求&#xff1a; 实验目的和要求 掌握SQL嵌套查询和集合查询等各种高级查询的设计方法等。 实验软硬件要求&#xff1a; 计算机、MySQL,Navicat 实验内容、实验过程、所遇问题及其解决方法 实验内容&#xff1a;针…

Discourse 的用户信息中的 IP 地址显示的是 CloudFlare 的 IP 地址

因为使用了 CloudFlare 的反向地址。 所有 Discourse 获得的用户的 IP 地址其实是 CloudFlare 的服务器地址。 修改 好在 Discourse 已经提供了相关的解决方案。 需要在 Discourse 的配置文件中&#xff0c;添加下面的内容&#xff1a; “templates/cloudflare.template.ym…

分布式系统概念和设计——协调和协定

分布式系统概念和设计 协调和协定 分布式系统中的进程如何协调它们的动作和对共享值达成协议? 算法在分布式系统中的基本目的是&#xff1a;供一组进程来协调它们的动作或对一个或多个值达成协议 避免固定的主-从关系的主要原因是&#xff0c;经常需要系统即使在系统故障的情…