为什么C++11要搞出一个nullptr?nullptr存在的意义是是什么?

news2024/11/16 15:45:27

文章目录

  • 1.NULL的定义
  • 2.C++代码的二义性
  • 3.nullptr的出现
  • 4.总结

在这里插入图片描述

1.NULL的定义

NULL实际是一个宏 传统的C头文件(stddef.h)中对于NULL的定义

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

代码含义

如果NULL没有被定义执行以下代码

如果是在C++中 #define NULL 0字面常量0
如果不是[即在C语言中]#define NULL ((void *)0)无类型指针(void*)的常量

2.C++代码的二义性

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

在这里插入图片描述

程序本意是想通过f(NULL)调用指针版本的f(int*)函数,由于NULL被定义成0,与程序的初衷相悖

字面常量0既可以是一个整形数字,也可以是无类型的指针(void*)常量,但是编译器默认情况下将其看成是一个整形常量,如果要将其按照指针方式来使用,必须对其进行强转(void*)0。

进一步的问题 C++是强类型语言

在这里插入图片描述

3.nullptr的出现

在这里插入图片描述

nullptr的出现使得程序目的明确
即NULL被认为是整型数字0
nullptr被认为是一个指针

nullptr是nullptr_t的别名 --- 空指针字面值类型
在<cstddef>中定义
typedef decltype(nullptr) nullptr_t;

4.总结

c++中使用nullptr替代NULL赋值给空指针

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

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

相关文章

基于SpringBoot的导师双选系统设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 导师信息管理 导师选择统计报表 学员管理 导师功能实现 项目信息管理 项目提交管理 学员功能实现 导师信息管理 项目信息管理 指导项目查看 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言…

使用Java的GeoTools地理库计算某个点是否在多边形内,经纬度数组转换为wkt格式数据

前言 本章讲解使用Java的GeoTools地理库计算某个点是否在多边形内。 本章适用于后台服务的GIS电子围栏计算。 GeoTools介绍 GeoTools是开源的Java地理信息计算库。GeoServer地图引擎就是基于GeoTools库构建得地图服务,可以说非常强大。 官网地址:https://docs.geotools.or…

2023年【公路水运工程施工企业安全生产管理人员】考试题及公路水运工程施工企业安全生产管理人员操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 公路水运工程施工企业安全生产管理人员考试题考前必练&#xff01;安全生产模拟考试一点通每个月更新公路水运工程施工企业安全生产管理人员操作证考试题目及答案&#xff01;多做几遍&#xff0c;其实通过公路水运工…

SpringBoot注解篇之@Resource与@Autowired

大家好&#xff0c;我是AK&#xff0c;最近在整理Java相关技术知识体系化&#xff1b;本篇主要介绍Resource 注解和 Autowired的区别以及使用&#xff0c;适合学习spring框架小伙伴了解学习。 目录 一、Resource与Autowired的区别二、Resource详解三、Autowired详解 一、Resour…

13SpringMVC中拦截器的配置(拦截规则)和多个拦截器的preHandle,postHandle执行顺序原理详解

拦截器 Servlet中的过滤器的实现及其原理,参考文章 配置一个拦截器 SpringMVC中请求的处理流程: 用户请求—>listener—>filter—>DispatcherServlet—>filter—>preHandle—>controller—>postHandle 第一步: 编写一个Java类实现HandlerInterceptor(…

基于SpringBoot的在线教育系统

目录 前言 一、技术栈 二、系统功能介绍 普通管理员管理 课程管理员管理 课程信息管理 用户信息管理 讲师信息管理 课程信息查看 讲师信息查看 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c…

EDUSRC-记一个SHELL捡漏

目录 ​编辑 Jenkins - println绕过到shell命令执行 语法 Jenkins未授权访问(捡漏失败) Jenkins捡漏 弱口令 脚本执行(println失败) CHATGPT调教绕过 hack渗透视频教程&#xff0c;扫码免费领 Jenkins - println绕过到shell命令执行 语法 org"China Education and…

【excel技巧】如何在Excel表格中添加选项按钮?

不知道大家是否会9遇到需要勾中选项的情况&#xff0c;我们可以在电子表格中制作出可以勾选、选中的选项按钮&#xff0c;今天我们一起学习一下设置方法。 首先&#xff0c;我们需要先在excel工具栏中添加一个功能模块&#xff1a;开发工具 依次点击excel中的文件 – 选项 –…

【问题思考总结】二次型和二次曲面的关系【常数项的改变对曲面的影响】【图文】

问题 今天做到一个题的时候发现&#xff0c;之前记的结论记错了&#xff0c;一个方程本来应该是双叶双曲面我记得&#xff0c;结果答案竟然是圆锥面&#xff0c;后来发现原因是常数项等于0或者不等于0的差别。因此&#xff0c;就这个问题我们来通过图文的方式探讨一下两种情况…

【广州华锐互动】VR建筑施工事故体验:提高工人安全意识和责任感

VR建筑施工事故体验的意义在于通过模拟真实场景和情况&#xff0c;帮助人们更好地理解建筑施工中的安全问题&#xff0c;并提供一种安全、有效的方式来学习和掌握安全技能。 建筑施工是一项高风险的工作&#xff0c;涉及各种复杂的工作环境和操作过程。在现实中&#xff0c;建筑…

剧院建筑三维可视化综合管控平台提高安全管理效率

随着数字孪生技术的高速发展&#xff0c;智慧楼宇也被提上日程&#xff0c;以往楼宇管理存在着设备故障排查困难、能源浪费与管理不足、安全性和风险高等问题&#xff0c;而智慧楼宇数字孪生可视化中控平台&#xff0c;打造智慧楼宇管理一张图&#xff0c;实现了智慧建筑和楼宇…

资深8年测试整理,接口测试必备-加密与签名,让你不再走弯路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、接口加密解密 …

四.镜头知识之放大倍率

四.镜头知识之放大倍率 文章目录 四.镜头知识之放大倍率4.0 前言4.1 镜头的光学放大倍率的计算方法4.2 显示器的电子放大倍率4.2.1 智能硬件产品的显示放大倍率计算案例 4.3 系统放大倍率4.4 智能硬件产品的系统放大倍率计算案例4.4 智能硬件产品的系统放大倍率计算案例 4.0 前…

成绩分析数据的重要性,老师们一定要看过来!

成绩分析数据在教育领域中具有重要性&#xff0c;对于教师们来说是一项必不可少的工具。下面将详细介绍成绩分析数据的重要性&#xff0c;并强调为什么老师们一定要关注和利用这些数据。 **1. 了解学生的学习情况** 成绩分析数据可以帮助教师全面了解学生的学习情况。通过分析…

Jenkins发布失败记录

Exception when publishing, exception message [Exec exit status not zero. Status [127]] 见链接&#xff1a;Jenkins发布时常见异常&#xff08;持续更新...&#xff09;_exception when publishing, exception message [exec_码农StayUp的博客-CSDN博客 The remote end hu…

mysql sql语句遍历树结构

mysqlsql语句遍历树结构 MySQL SQL语句遍历树结构实现步骤 理解树结构和遍历算法 在开始之前&#xff0c;我们首先需要了解什么是树结构以及如何遍历树结构。树结构是一种常用的数据结构&#xff0c;由各个节点和节点之间的关系构成。树结构的一个重要应用是表示具有层级关系…

winscope使用方法

Ubuntu下Android T的winscope工具使用方法 1. 在Android的项目源码中&#xff0c;prebuilts/misc/common/winscope目录下 直接使用chrome浏览器打开文件winscope.html 2. 可能会提示adb问题 进入目录development/tools/winscope/adb_proxy&#xff0c;有文件winscope_proxy.…

地球系统模式的应用与进阶丨CESM丨Linux丨CLM丨代码修改等

目录 第一部分 运行前的准备 第二部分 Linux系统及编译 第三部分 CESM原理、结构 第四部分 CESM程序获取、结构及其功能 第五部分 CESM 移植、安装及快速运行 第六部分 CESM 配置选项及数据文件制备 第七部分 CESM单模块运行——以CLM为例 第八部分 CESM 的部分耦合运行…

TOGAF(企业架构)

TOGAF 核心概念&#xff08;官方原版&#xff09; 什么是TOGAF&#xff1f; TOGAF?是一种经验证的企业架构方法和框架&#xff0c;被世界领先的组织用于提高业务效率。它是一个企业架构标准&#xff0c;确保企业架构专业人员之间的标准、方法和通信一致&#xff0c;以便我们…

CentOS 7 服务器上创建新用户及设置用户密码有效期

一、创建用户 1、以 root 用户身份登录到 CentOS 服务器 2、运行以下命令以创建新用户&#xff1a; useradd -m -s /bin/bash username其中&#xff0c;username 是您要创建的新用户的用户名。该命令将创建一个新用户并为其分配一个主目录。3、运行以下命令以设置新用户的密码…