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

C++11新特性2.空指针nullptr

目录

一.简介

1.基本概念

2.语法

二.使用示例

示例1:初始化指针

示例2:作为函数参数

三.nullptr与NULL的区别

1.类型安全

2.函数重载问题

3.注意事项


一.简介

1.基本概念

nullptr 是一个类型安全的空指针常量,它的类型是 std::nullptr_t。可以将 nullptr 赋值给任何指针类型(包括普通指针、成员指针等),也可以将其与指针进行比较。

2.语法

int* ptr = nullptr;//这里的int可以是其它数据类型。

将 ptr 初始化为 nullptr。

二.使用示例

示例1:初始化指针

#include <iostream>int main() {// 初始化一个整型指针为 nullptrint* ptr = nullptr;if (ptr == nullptr) {std::cout << "ptr is a null pointer." << std::endl;}return 0;
}

在这个示例中,将 ptr 初始化为 nullptr,表示它不指向任何有效的内存地址。 

示例2:作为函数参数

#include <iostream>void func(int* ptr) {if (ptr == nullptr) {std::cout << "Received a null pointer." << std::endl;} else {std::cout << "Received a valid pointer." << std::endl;}
}int main() {int num = 10;int* validPtr = &num;int* nullPtr = nullptr;func(validPtr);func(nullPtr);return 0;
}

在这个示例中,func 函数接受一个整型指针作为参数,可以将 nullptr 传递给该函数。 

三.nullptr与NULL的区别

1.类型安全

NULL 本质上是一个整数(通常是 0),在某些情况下可能会导致类型不匹配的问题。而 nullptr 有自己的类型 std::nullptr_t,可以更好地进行类型检查,避免一些潜在的错误。

2.函数重载问题

当存在函数重载时,NULL 可能会导致歧义。例如:

#include <iostream>void func(int n) {std::cout << "Called func(int): " << n << std::endl;
}void func(int* ptr) {if (ptr == nullptr) {std::cout << "Called func(int*): null pointer" << std::endl;} else {std::cout << "Called func(int*): valid pointer" << std::endl;}
}int main() {// 使用 NULL 会调用 func(int),可能不是预期的结果func(NULL); // 使用 nullptr 会调用 func(int*)func(nullptr); return 0;
}

在这个示例中,使用 NULL 调用 func 函数时,由于NULL本质上是0,会调用func(int);而使用nullptr会调用 func(int*),符合预期。

3.注意事项

(1)兼容性:如果需要兼容旧的 C++ 代码,可能仍然需要使用 NULL。但在新的 C++11 及以后的代码中,建议优先使用 nullptr 来表示空指针。

(2)不能隐式转换为整数nullptr 不能隐式转换为整数类型,而 NULL 可以。例如,不能将 nullptr 直接赋值给一个整型变量。

nullptr 是一个更安全、更清晰的表示空指针的方式,在 C++11 及以后的代码中应该优先使用。

相关文章:

C++11新特性2.空指针nullptr

目录 一.简介 1.基本概念 2.语法 二.使用示例 示例1&#xff1a;初始化指针 示例2&#xff1a;作为函数参数 三.nullptr与NULL的区别 1.类型安全 2.函数重载问题 3.注意事项 一.简介 1.基本概念 nullptr 是一个类型安全的空指针常量&#xff0c;它的类型是 std::nul…...

实战案例分享:WLAN TKIP/CCMP加密组件的选择

无线接入点&#xff08;AP&#xff09;与终端&#xff08;STA&#xff09;在连接过程中涉及多种加密算法&#xff0c;如CCMP、TKIP等&#xff0c;选择合适的加密组件对于保证网络安全和兼容性至关重要。本篇我们将分析Wi-Fi加密机制、Wi-Fi加密组件的选型要点、典型问题及解决方…...

Day(19)--IO流(三)

文件加密 ps:^异或: 两边相同就是false 两边不同就是true 如果比较的是数字,那就会把它转换成为二进制,从右自左依次比较 总结:如果一个数字被异或两次,结果还是原来的数字 缓冲流 字节缓冲流 BufferedInputStream------字节缓冲输入流 BufferedOutputStream----字节…...

解锁STM32外设:开启嵌入式开发新世界

✨✨✨这里是小韩学长yyds的BLOG(喜欢作者的点个关注吧) ✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds-CSDN博客 目录 探索 STM32 强大的外设家族 初窥门径&#xff1a;STM32 外设开发基础 开发方式与工具 外设配置基础步骤 深入剖析&#xff1a;常见外设应用实例…...

SSLScan实战指南:全面检测SSL/TLS安全配置

SSLScan是一款开源的SSL/TLS安全扫描工具,用于检测服务器的加密协议、支持的加密套件、证书信息以及潜在的安全漏洞。本指南将详细介绍如何安装、使用SSLScan,并结合实战案例帮助您全面评估服务器的安全性。 一、SSLScan简介 功能特性: 检测支持的SSL/TLS协议版本(如TLS 1.…...

docker学习笔记(1)从安装docker到使用Portainer部署容器

docker学习笔记第一课 先交代背景 docker宿主机系统&#xff1a;阿里云ubuntu22.04 开发机系统&#xff1a;win11 docker镜像仓库&#xff1a;阿里云&#xff0c;此阿里云与宿主机系统没有关系&#xff0c;是阿里云提供的一个免费的docker仓库 代码托管平台&#xff1a;github&…...

基于Spring Boot的健美操评分管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

【Linux】——初识操作系统

文章目录 冯-诺依曼体系结构操作系统shell 冯-诺依曼体系结构 我们现在所使用的计算机就是冯-诺依曼体系结构。 存储器就是内存。 由下图可知&#xff0c;寄存器最快&#xff0c;为啥不用寄存器呢&#xff1f; 因为越快价格就最贵&#xff0c;冯诺依曼体系结构的诞生&#xf…...

PromQL计算gateway指标增量最佳实践及常见问题答疑

普米官方网站 普米官方帮助&#xff1a;Getting started | Prometheus 普米下载地址&#xff1a;Download | Prometheus 普米查询语法&#xff1a;Querying basics | Prometheus 普米函数参考&#xff1a;Query functions | Prometheus promql计算增量 在PromQL&#xff…...

vue使用slot时子组件的onUpdated执行问题

vue使用slot时子组件的onUpdated执行问题 在使用 Vue 的插槽 (slot) 功能时&#xff0c;可能会遇到一个问题&#xff1a;当父组件的任何状态更新时&#xff0c;子组件的 onUpdated 事件会被触发。这个问题在使用默认插槽时尤为明显。 为了避免这种情况&#xff0c;可以使用作用…...

从零到多页复用:我的WPF MVVM国际化实践

文章目录 第一步&#xff1a;基础实现&#xff0c;资源文件入门第二步&#xff1a;依赖属性&#xff0c;提升WPF体验第三步&#xff1a;多页面复用&#xff0c;减少重复代码第四步&#xff1a;动态化&#xff0c;应对更多字符串总结与反思 作为一名WPF开发者&#xff0c;我最近…...

C++11新特性 3.constexpr

目录 一.简介 1.基本概念 2.语法 &#xff08;1&#xff09;constexpr 变量 &#xff08;2&#xff09;constexpr 函数 二.使用示例 示例1&#xff1a;constexpr 修饰变量 示例2&#xff1a;constexpr 修饰函数 示例3&#xff1a;constexpr 修饰构造函数 三.注意事项 …...

什么是AI Agent

AI Agent&#xff08;人工智能代理&#xff09;是一种能够感知环境、自主决策并采取行动以实现特定目标的智能实体。它结合了人工智能技术&#xff08;如机器学习、自然语言处理、计算机视觉等&#xff09;&#xff0c;能够通过与环境交互不断学习和优化行为。 核心特征 自主…...

LeetCode 解题思路 12(Hot 100)

解题思路&#xff1a; 定义三个指针&#xff1a; prev&#xff08;前驱节点&#xff09;、current&#xff08;当前节点&#xff09;、nextNode&#xff08;临时保存下一个节点&#xff09;遍历链表&#xff1a; 每次将 current.next 指向 prev&#xff0c;移动指针直到 curre…...

HTML-05NPM使用踩坑

2025-03-04-NPM使用踩坑 本文讲述了一个苦逼程序员在使用NPM的时候突然来了一记nmp login天雷&#xff0c;然后一番折腾之后&#xff0c;终究还是没有解决npm的问题&#x1f61e;&#x1f61e;&#x1f61e;,最终使用cnpm完美解决的故事。 文章目录 2025-03-04-NPM使用踩坑[toc…...

学校地摊尝试实验

学校地摊尝试实验 诸位&#xff0c;我要告诉诸位一件大消息&#xff0c;那就是&#xff0c;我将会利用学校时光的最后一段时间进行疯狂摆摊练习&#xff0c;如何进行摆摊&#xff0c;大家 听我娓娓道来。我要确定摆摊的目的&#xff0c; 第一&#xff0c;赚钱&#xff0c;第二…...

MHA集群

一.MHA集群 MHA master high avavibility 主服务器高可用 如上图所示&#xff0c;我们之前说过&#xff0c;如果在主从复制架构中主服务器出现故障&#xff0c;就需要我们将从服务器作为主服务器&#xff0c;等故障的主服务器修复好之后&#xff0c;再将修好的主服务器作为从服…...

Bazel搭建CUDA工程入门

环境版本&#xff1a; 工程目录&#xff1a; 测试输出&#xff1a; WORKSPACE 参考仓库&#xff1a;CUDA rules for Bazel 及 examples load("bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")http_archive(name "rules_cuda…...

linux awk命令和awk语言

linux awk和awk语言 通常大家说的awk几乎都是在linux/unix中使用的awk命令&#xff0c;见下&#xff0c; https://www.geeksforgeeks.org/awk-command-unixlinux-examples/ 作为命令使用的话&#xff0c;存在下内容 Awk 是一个工具&#xff0c;使程序员能够编写小巧但有效的…...

基于字符的卷积网络在文本分类中的应用与探索

该论文探讨了使用基于字符的卷积网络(ConvNets)进行文本分类的方法,并通过构建大规模数据集展示了其在文本分类任务中的优越性能。与传统的词袋模型、N-gram模型及其TF-IDF变体,以及基于词的卷积网络和循环神经网络等深度学习模型进行了对比。研究发现,基于字符的卷积网络…...

uniapp使用蓝牙,usb,局域网,打印机打印

使用流程&#xff08;支持安卓和iOS&#xff09; 引入SDK 引入原生插件包地址如下 https://github.com/oldfive20250214/UniPrinterDemo 连接设备 安卓支持经典蓝牙、ble蓝牙、usb、局域网&#xff08;参考API&#xff09; iOS支持ble蓝牙、局域网&#xff08;参考API&…...

MyBatis 与 JDBC 的关系?

MyBatis 与 JDBC 存在密切的关系&#xff0c;可以理解为&#xff1a;MyBatis 是对 JDBC 的封装和增强&#xff0c;但并没有完全取代 JDBC。 1. JDBC (Java Database Connectivity): 底层 API: JDBC 是 Java 访问数据库的底层 API&#xff0c;它提供了一套标准的接口和类&…...

QILSTE灯珠:尺寸光电全解析

QILSTE灯珠&#xff1a;尺寸光电全解析 &#x1f31f; 型号H4-115BGRYA/5M&#xff0c;由QILSTE&#xff08;HongKong&#xff09;Technology Co., Ltd精心打造&#xff0c;以其1.6x1.5x0.4mm的紧凑外观尺寸&#xff0c;展现高亮红光、翠绿、蓝的缤纷色彩。 &#x1f4cf; 尺寸…...

golang从入门到做牛马:第一篇-我与golang的缘分,go语言简介

还记得2018年的夏天,刚毕业的我不知道该做些什么,于是自学了一周的go语言,想要找一份go语言工作的代码,当时的go还没有go mod来管理依赖包,在北京找了一个月的工作,找到了一个小公司做了后端开发,当然使用go语言开发,带着兴奋劲,年轻身体也好,边努力学习,边工作。 时…...

用IdleHandler来性能优化及原理源码分析

背景&#xff1a; 经常在做一些app冷启动速度优化等性能优化工作时候&#xff0c;经常可能会发现有时候需要引入一些第三方sdk&#xff0c;或者库&#xff0c;这些库一般会要求我们在onCreate中进行初始化等&#xff0c;但是onCreate属于生命周期的回调方法&#xff0c;如果on…...

如何在WPS中接入DeepSeek并使用OfficeAI助手(超细!成功版本)

目录 第一步&#xff1a;下载并安装OfficeAI助手 第二步&#xff1a;申请API Key 第三步:两种方式导入WPS 第一种:本地大模型Ollama 第二种APIKey接入 第四步&#xff1a;探索OfficeAI的创作功能 工作进展汇报 PPT大纲设计 第五步&#xff1a;我的使用体验(体验建议) …...

长短期记忆网络(LSTM)学习指南

长短期记忆网络&#xff08;LSTM&#xff09;学习指南 1. 定义和背景 长短期记忆网络&#xff08;Long Short-Term Memory, LSTM&#xff09;是一种递归神经网络&#xff08;RNN&#xff09;的变体&#xff0c;旨在解决传统RNN在处理长期依赖关系时遇到的梯度消失或爆炸问题。…...

Swagger-01.介绍和使用方式

一.Swagger介绍 有了接口文档&#xff0c;我们就可以根据接口文档来开发后端的代码了。如果我们开发完了某个功能&#xff0c;后端如何验证我们开发的是否正确呢&#xff1f;我们就需要测试&#xff0c;使用Swagger就可以帮助后端生成接口文档&#xff0c;并且可以进行后端的接…...

Unity 使用NGUI制作无限滑动列表

原理&#xff1a; 复用几个子物体&#xff0c;通过子物体的循环移动实现&#xff0c;如下图 在第一个子物体滑动到超出一定数值时&#xff0c;使其放到最下方 --------------------------------------------------------------》 然后不停的循环往复&#xff0c;向下滑动也是这…...

【并发编程】聊聊定时任务ScheduledThreadPool的实现原理和源码解析

ScheduledThreadPoolExecutor 是在线程池的基础上 拓展的定时功能的线程池&#xff0c;主要有四种方式&#xff0c;具体可以看代码&#xff0c; 这里主要描述下 scheduleAtFixedRate &#xff1a; 除了第一次执行的时间&#xff0c;后面任务执行的时间 为 time MAX(任务执行时…...