C++相关基础概念之入门讲解(下)
1. 引用
int main()
{const int a=10;int& aa=a;aa++;cout<<aa<<endl;
}
在这个代码里面aa是a的别名,aa++了,也就是a++;所以这里的输出是11;
举个例子,现在有一个人叫小明,我们给他取一个别名叫明明,明明去吃饭了,那是不是小明也去吃饭了,引用就是这个意思。
1.1 常引用
int main()
{const int a=10;int& aa=a;aa++;cout<<aa<<endl;
}
在这个代码里面,如果a是const int类型的,那就不可以对aa进行++的操作(会报错)。
举个例子,小明不可以吃饭,那也就是说明明不可以吃饭。
1.2 传值返回与传引用返回
int Fanc(int a)
{a++;return a;
}int main()
{int b=1;b=Fanc(b);cout<<b<<endl;return 0;
}
在这段代码里面,最终的结果是2。但是他在return a的时候产生了一份临时拷贝,然后把这个临时拷贝赋值给了b。我们前面说的消耗就是在这里。
PS:之所以要拷贝的原因涉及到函数栈帧的创建与销毁,简单来说就是a出了这个Fanc就会自动销毁,所以编译器要通过产生临时拷贝的方式来进行赋值。
传引用返回:
int& Fanc(int a)
{a++;return a;
}int main()
{int b=1;b=Fanc(b);cout<<b<<endl;return 0;
}
在这段代码里面,a其实是有危险的,因为是&,所以在这里并没用产生a的临时拷贝,也就是说在这里实际上造成了野指针现象。
修改的办法有两种。
一种是加一个全局变量
int c;// 全局变量int& Fanc(int a) {c = a + 1; return c;
}int main() {int b = 1;b = Fanc(b);cout << b << endl; return 0;
}
传入的是全局变量(或者静态变量也可以),所以在这里并不会被销毁。
还有一种是通过引用传递参数
int& Fanc(int& a) {a++; // 直接修改传入的参数return a; // 返回传入参数的引用
}int main() {int b = 1;Fanc(b); cout << b << endl; return 0;
}
通过引用传递参数,直接修改传入的参数并返回其引用 1.3 传值、传引用
首先,传值和传引用与传值返回与传引用返回不是同一个东西。
传值:
int Fanc(int a)
{a++;return a;
}int main()
{int b=1;b=Fanc(b);cout<<b<<endl;return 0;
}
这个就是我们在一开始的学习中使用函数的方式。消耗也比较大。
传引用:
int Fanc(int& a)
{a++;return a;
}int main()
{int b=1;Fanc(b);//没有了b=...cout<<b<<endl;return 0;
}
直接修改传入的参数,而不需要返回值。同时代价也小。
1.4 引用和指针的区别
在C++中,引用和指针都是用来间接访问变量的机制,但它们之间有一些重要的区别:
1. 引用是变量的别名,而指针是一个独立的实体。引用在声明时必须初始化,并且一旦引用和原变量绑定后,就无法再绑定到其他变量(这一点很重要);而指针可以在声明后指向不同的变量。
2. 引用不需要使用解引用操作符(*)来访问其绑定的变量,而指针需要使用解引用操作符(*)来访问其指向的变量。
3. 引用不能指向空值(null),而指针可以指向空值。
4. 指针可以进行算术运算,而引用不支持。
总的来说,引用更直观和安全,因为它不需要对空值进行处理,而指针更灵活,因为它可以指向不同的对象和进行算术运算。在实际使用中,应根据具体情况选择合适的机制。
2. 内联函数
inline int add(int a, int b)
{return a + b;
}int main()
{int result = add(3, 4); // 编译器可能会将 add 函数直接插入此处cout << "Result: " << result << endl;return 0;
}
内联函数的本质就是替换,通过把main函数里面的add直接转换成a+b,通过这样的方式来提升效率。
2.1 内联函数特性
3. auto关键字
auto我从刚刚学到他的时候认为没什么用,但是当我学到后面的时候,我才发现他是那么的好用,因为到后面很多时候类型是一层套一层,就是说会特别的长,这个时候auto的作用就体现出来了。
他的本质就是让编译器自动推导类型。换种说法就是把我们的这部分工作交给了编译器。
3.1 auto使用时候的注意事项
int main()
{auto x = 10,y=3;return 0
}
上面这种就是合法的,因为auto在同一行只会进行一次推导,如果说y=3.3,那么编译器就会报错。
3.2 auto不能推导的类型
auto不可以作为函数的参数类型,比如说:
auto fanc(auto a)
{.......
}
这种是不合法的(其实没有什么别的原因,就是设计者在设计的时候没有允许这种用法,我们在后面会学到一种template<class T>的东西,他可以实现我们上面想要达到的目的)。
同时,auto也不可以作为数组的类型,简单来说就是:
int main()
{auto arr[]={1,2,3,4,5,6}return 0;
}
这种也是不可以的(原因如上)。
4. 范围for
void TestFor()
{int arr[] = { 1, 2, 3, 4, 5 };for(auto& a : arr)a *= 2;
}
这就是范围for的用法,通过这样的方式就可以使arr里面的数都*上2。
PS:加上引用就可以改变arr,如果说是想要改变范围for里面的数组,那最好就是在auto后面加一个&。
4.1 范围for的原理
范围for的底层就是迭代器(iterator),他在编译器编译的时候就会修改为迭代器。
所以说我们在里面想要遍历或者修改的东西必须有begin和end的方法,begin和end就是for循环迭代的范围。
5. 空指针nullptr
相关文章:
C++相关基础概念之入门讲解(下)
1. 引用 int main() {const int a10;int& aaa;aa;cout<<aa<<endl; } 引用 不是新定义一个变量,而 是给已存在变量取了一个别名 ,编译器不会为引用变量开辟内存空 间,它和它引用的变量 共用同一块内存空间(初…...
从零开始学可靠消息投递:分布式事务的“最终一致性”方案
一、什么是可靠消息投递?—— 消息队列的“防丢宝典” 可靠消息投递 是指通过消息队列(如 RocketMQ)确保消息在生产、传输、消费过程中不丢失、不重复、有序到达。其核心目标是在分布式系统中保障数据最终一致性,常用于订单处理、…...
生物化学笔记:医学免疫学原理 免疫系统的组成与功能+克隆选择学说
免疫系统的组成与功能 克隆选择学说 克隆选择学说(Clonal Selection Theory)是免疫学的核心理论之一,由 麦克法兰伯内特(Frank Macfarlane Burnet) 在 1957 年提出,用于解释特异性免疫反应的机制。 基本概…...
SpringBoot最佳实践之 - 使用AOP记录操作日志
1. 前言 本篇博客是个人在工作中遇到的需求。针对此需求,开发了具体的实现代码。并不是普适的记录操作日志的方式。以阅读本篇博客的朋友,可以参考此篇博客中记录日志的方式,可能会对你有些许帮助和启发。 2. 需求描述 有一个后台管理系统…...
MySql中 一条select语句的执行流程
一条 SELECT 语句的执行流程涉及到数据库管理系统(DBMS)的多个组件和阶段。以下是一个更为详细的执行流程,以关系型数据库(如 MySQL、PostgreSQL 等)为例: 1. 客户端发送查询 用户输入:用户在客…...
图论——kruskal算法
53. 寻宝(第七期模拟笔试) 题目描述 在世界的某个区域,有一些分散的神秘岛屿,每个岛屿上都有一种珍稀的资源或者宝藏。国王打算在这些岛屿上建公路,方便运输。 不同岛屿之间,路途距离不同,国王希望你可以规划建公路的方案,如何可以以最短的总公路距离将 所有岛屿联通…...
【dify】 dify环境变量配置说明
这是一份Dify平台的环境变量配置文件,对平台的各项功能、服务和组件进行参数设置。以下是对其主要部分的详细解读: 1. 通用变量(Common Variables) CONSOLE_API_URL:控制台API的后端URL,用于拼接授权回调…...
如何在 Vue 项目中实现动态组件加载,有什么应用场景?
大白话如何在 Vue 项目中实现动态组件加载,有什么应用场景? 什么是动态组件加载 在 Vue 项目里,动态组件加载就是能够在程序运行时动态地决定要渲染哪个组件。打个比方,就像你去餐馆点菜,不同的时间你可能想吃不同的…...
FRP在物联网设备中的穿透方案
物联网设备常位于NAT后,FRP为其提供稳定穿透链路。 配置要点 轻量化部署:使用ARM版本FRP客户端,适配树莓派等设备9。 自启动脚本:通过systemd或crontab实现设备重启后自动连接26。 低功耗优化:调整心跳间隔…...
Android 13深度定制:SystemUI状态栏时间居中显示终极实战指南
一、架构设计与技术解析 1. SystemUI状态栏核心布局机制 层级结构 mermaid 复制 graph TDPhoneStatusBarView --> StatusBarContents[status_bar_contents]StatusBarContents --> LeftLayout[status_bar_left_side]StatusBarContents --> ClockLayout[Clock控件]Left…...
Python实战(3)-数据库操作
前面说过,可用的SQL数据库引擎有很多,它们都有相应的Python模块。这些数据库引擎大都作为服务器程序运行,连安装都需要有管理员权限。为降低Python DB API的使用门槛,我选择了一个名为SQLite的小型数据库引擎。它不需要作为独立的…...
【redis】在 Spring中操作 Redis
文章目录 基础设置依赖StringRedisTemplate库的封装 运行StringList删库 SetHashZset 基础设置 依赖 需要选择这个依赖 StringRedisTemplate // 后续 redis 测试的各种方法,都通过这个 Controller 提供的 http 接口来触发 RestController public class MyC…...
企业数据孤岛的纠结与恩怨
以下是关于控制中数据孤岛的纠结于恩怨: 一、工业控制中数据孤岛的定义 工业控制中的数据孤岛是指在工业生产过程中,各个生产环节、不同的系统或设备之间的数据相互独立、隔离,无法进行有效的共享和交互,形成了一个个相对封闭的数…...
在 Elasticsearch 中扩展后期交互模型 - 第 2 部分 - 8.18
作者:来自 Elastic Peter Straer 及 Benjamin Trent 本文探讨了如何优化后期交互向量,以适应大规模生产工作负载,例如减少磁盘空间占用和提高计算效率。 在之前关于 ColPali 的博客中,我们探讨了如何使用 Elasticsearch 创建视觉搜…...
开发SAPUI5 Fiori应用并部署到SAP系统
首先新建一个项目文件夹 在VScode中打开 打开SAP Fiori(需要先下载安装,参考上上一篇文章) ,选择已添加的SAP S4 ERP系统 ,点击创建Firoi应用。 如果没有添加系统的,点击添加按钮,添加即可,注意ÿ…...
<C#> 详细介绍.net 三种依赖注入:AddTransient、AddScoped、AddSingleton 的区别
在 .NET 8 里,AddTransient、AddScoped 和 AddSingleton 均为依赖注入容器用于注册服务的方法,不过它们的生命周期管理方式存在差异。下面为你详细介绍这三种方法的区别。 1. AddTransient AddTransient 方法所注册的服务,每次被请求时都会…...
游戏引擎学习第168天
回顾并计划今天的内容 今天我们将进行一些思考工作,回顾一下之前的工作。我们已经在资产处理工具中提取了字体,并展示了如何使用该库。我们有两个版本,一个不使用任何库,适合想要完全不依赖库的用户; 我们今天的任务…...
html5炫酷3D立体文字效果实现详解
炫酷3D立体文字效果实现详解 这里写目录标题 炫酷3D立体文字效果实现详解项目概述技术实现要点1. 基础布局设置2. 动态背景效果3. 文字渐变效果4. 立体阴影效果5. 悬浮动画效果 技术难点及解决方案1. 文字渐变动画2. 立体阴影效果3. 性能优化 浏览器兼容性总结 项目概述 在这个…...
VSCode中搜索插件显示“提取扩展时出错。Failed to fetch”问题解决!
大致的问题如下,在VSCode的插件商店搜索插件时提示如下: 导致的情况有以下几点: 1、代理问题,如果是代理引起的,可以继续使用代理后也能搜索和安装插件。 2、还有可能是你的所连接的网络设置了防火墙,比较…...
回溯-单词搜索
79.单词搜索 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平…...
高级java每日一道面试题-2025年3月07日-微服务篇[Eureka篇]-Eureka Server和Eureka Client关系?
如果有遗漏,评论区告诉我进行补充 面试官: Eureka Server和Eureka Client关系? 我回答: 在微服务架构中,Eureka作为Netflix开源的服务发现组件,由Eureka Server(服务端)和Eureka Client(客户端)两大部分…...
SpringBoot有几种获取Request对象的方法
HttpServletRequest 简称 Request,它是一个 Servlet API 提供的对象,用于获取客户端发起的 HTTP 请求信息。例如:获取请求参数、获取请求头、获取 Session 会话信息、获取请求的 IP 地址等信息。 那么问题来了,在 Spring Boot 中…...
【Agent】Dify Docker 安装问题 INTERNAL SERVER ERROR
总结:建议大家选择稳定版本的分支,直接拉取 master 分支,可能出现一下后面更新代码导致缺失一些环境内容。 我是通过 Docker 进行安装的,由于项目开发者不严谨导致,遇到一个奇怪的问题: INTERNAL SERVER E…...
操作系统——(处理机调度与死锁)
目录 一、处理机调度 (1)层次 (2)进程调度 (3)调度算法 1.先来先服务算法(FCFS) 2.短作业优先算法(SJF) 3.高优先权算法(HPF) …...
MyBatis 面试专题
MyBatis 面试专题 基础概念MyBatis中的工作原理MyBatis 与 Hibernate 的区别?#{} 和 ${} 的区别?MyBatis 的核心组件有哪些? 映射与配置如何传递多个参数?ResultMap 的作用是什么?动态 SQL 常用标签有哪些?…...
C++实现大整数相加
力扣原题字符串相加 415. 字符串相加 - 力扣(LeetCode) 大整数意味着无法用基本数据类型装下,只能用字符串装下,然后手工模拟计算过程 从两个字符串的最后一位开始两两相加,记录进位,每次均有sumabsum&…...
Flutter 快速接入Fair
少点废话 1.了解Fair Fair,由58同城开源提供,目的是flutter项目上架后动态更新代码, 首先了解一个概念,热更新是flutter打包APK后会讲所有的dart代码生成一个so文件,手机通过读取并执行so文件;基于此&am…...
【深度学习新浪潮】AI ISP技术与手机厂商演进历史
本文是关于AI ISP(人工智能图像信号处理器)的技术解析、与传统ISP(图像信号处理器)的区别、近三年研究进展,以及各大手机厂商在该领域演进历史的详细报告。本报告综合多个权威来源的信息,力求全面、深入地呈现相关技术发展脉络与行业动态。 第一部分:AI ISP的定义及与传…...
用逻辑分析仪分析Usart波形
USART的波形抓取最简单,帧头帧尾只需要电平上升下降沿就可以了,不需要自己定义,也没有ID位,逻辑分析仪可以直接抓取发送的数据: 口配置:9600bps,8数据位,无校验,1个停止位…...
常⻅CMS漏洞 -DeDeCMS 获取webshell
DedeCMS是织梦团队开发PHP ⽹站管理系统,它以简单、易⽤、⾼效为特⾊,组建出各种各样各 具特⾊的⽹站 姿势⼀:通过⽂件管理器上传WebShell 1.访问⽬标靶场dedecms 后台可以直接上传任意⽂件 2.上传木马文件 3.蚁剑连接 姿势⼆:…...
基于STC89C51的太阳自动跟踪系统的设计与实现—单片机控制步进电机实现太阳跟踪控制(仿真+程序+原理图+PCB+文档)
摘 要 随着我国经济的飞速发展,促使各种能源使用入不敷出,尤其是最主要的能源,煤炭石油资源不断消耗与短缺,因此人类寻找其他替代能源的脚步正在加快。而太阳能则具有无污染﹑可再生﹑储量大等优点,且分布范围广&…...
JAVA_数据结构_栈和队列
1.栈(Stack) 1.1概念 栈是一种特殊的线性表,它只允许一端进行增删查改操作,它的头称为栈顶,进行压栈和出栈的操作,则另一端称为栈底,并且它遵循着先进后出的操作。 压栈:也可称为进…...
独立组网和非独立组网
独立组网(SA) vs. 非独立组网(NSA) 5G组网方式主要分为 独立组网(SA, Standalone) 和 非独立组网(NSA, Non-Standalone),两者在网络架构、核心网、应用场景等方面有所不…...
HR人员和组织信息同步AD域服务器实战方法JAVA
HR人员和组织信息同步AD域服务器 前期准备AD域基础知识整理HR同步AD的逻辑代码结构配置文件设置启动类HR组织的BeanHR人员Bean获取HR人员和组织信息的类AD中处理组织和人员的类日志配置 POM.xml文件生成EXE文件服务器定时任务异常问题注意事项 前期准备 1、开发语言࿱…...
【云上CPU玩转AIGC】——腾讯云高性能应用服务HAI已支持DeepSeek-R1模型预装环境和CPU算力
🎼个人主页:【Y小夜】 😎作者简介:一位双非学校的大三学生,编程爱好者, 专注于基础和实战分享,欢迎私信咨询! 🎆入门专栏:🎇【MySQL࿰…...
【测试开发】OKR 网页管理端自动化测试报告
【测试报告】OKR 管理端 项目名称版本号测试负责人测试完成日期联系方式OKR 管理端4.0马铭胜2025-03-2115362558972 1、项目背景 1.1 OKR 用户端 在如今这个快节奏的时代中,个人和组织的成长往往依赖于清晰、明确且意义深远的目标。然而,如何设定并持…...
go语言中空结构体
空结构体(struct{}) 普通理解 在结构体中,可以包裹一系列与对象相关的属性,但若该对象没有属性呢?那它就是一个空结构体。 空结构体,和正常的结构体一样,可以接收方法函数。 type Lamp struct{}func (l Lamp) On()…...
如何缓解大语言模型推理中的“幻觉”(Hallucination)?
目录 如何缓解大语言模型推理中的“幻觉”(Hallucination)? 1. 什么是大语言模型的“幻觉”(Hallucination)? 幻觉的常见类型 2. 如何缓解大模型的幻觉问题? 方法 1:使用知识检索…...
优选算法系列(3.二分查找 )
目录 一.二分查找(easy) 题目链接:704. 二分查找 - 力扣(LeetCode) 解法: 代码: 二.在排序数组中查找元素的第⼀个和最后⼀个位置(medium) 题目链接:34.…...
【论文阅读】Contrastive Clustering Learning for Multi-Behavior Recommendation
论文地址:Contrastive Clustering Learning for Multi-Behavior Recommendation | ACM Transactions on Information Systems 摘要 近年来,多行为推荐模型取得了显著成功。然而,许多模型未充分考虑不同行为之间的共性与差异性,以…...
细胞计数专题 | 高效 + 精准!点成LUNA-III™细胞计数仪解锁活细胞检测与浓度分析新高度
1 引言 在生物医学研究中,准确的细胞计数至关重要,它影响着细胞治疗、疾病诊断、组织再生和生物测定等应用领域。传统的手动计数方法既耗时又容易产生偏差。像点成LUNA-III™自动细胞计数仪这样的自动化系统,为提高计数的准确性、可重复性和…...
糊涂人寄信——递推
思路分析:当有n封信,n个信封时。第k封信没有装在第k个信封里(k从1~n),就算所有的信封都装错了。我们可以得知的是,当有1封信,时,装错类别数为0。当有两封信时,装错类别为1。 当有三…...
深入Python C API:掌握常用函数与实战技巧
深入Python C API:掌握常用函数与实战技巧 Python的灵活性和易用性使其成为广泛应用的编程语言,但在某些场景下(如高性能计算、与C/C代码交互),直接使用C语言扩展Python的能力变得尤为重要。Python C API(…...
第16章:基于CNN和Transformer对心脏左心室的实验分析及改进策略
目录 1. 项目需求 2. 网络选择 2.1 UNet模块 2.2 TransUnet 2.2.1 SE模块 2.2.2 CBAM 2.3 关键代码 3 对比试验 3.1 unet 3.2 transformerSE 3.3 transformerCBAM 4. 结果分析 5. 推理 6. 下载 1. 项目需求 本文需要做的工作是基于CNN和Transformer的心脏左心室…...
Word中公式自动标号带章节编号
(1)插入一行三列的表格,设置宽度分别为0.5,13.39和1.5,设置纵向居中,中间列居中对齐,最右侧列靠右对齐,设置段落如下 (2)插入域代码 【Word】利用域代码快速实…...
AI风向标《AI与视频制作全攻略:从入门到精通实战课程》
课程信息 AI风向标《AI与视频制作全攻略:从入门到精通实战课程》,夸克网盘和百度网盘课程。 课程介绍 《AI与视频制作全攻略:从入门到精通实战课程》是一套全面融合AI技术与视频制作的实战课程,旨在帮助创作者从基础软件使用到高级视频剪辑…...
el-table折叠懒加载支持排序
el-table折叠懒加载支持排序 因为el-table懒加载的子节点是通过缓存实现的,如果想在展开的情况下直接刷新对应子节点数据,要操作el-table组件自身数据,否则不会更新 以排序功能为例 maps: new Map() //用于存储子节点懒加载的数据// 加载子…...
Kotlin v2.1.20 发布,标准库又有哪些变化?
大家吼哇!就在三小时前,Kotlin v2.1.20 发布了,更新的内容也已经在官网上更新:What’s new in Kotlin 2.1.20 。 我粗略地看了一下,下面为大家选出一些我比较感兴趣、且你可能也会感兴趣的内容。 注意!这里…...
AI智能问答“胡说八道“-RAG探索之路
AI智能问答"胡说八道"-RAG探索之路 背景信息RAGRAG技术的知识难题分块矛盾知识缺失相互冲突 RAG知识优化实践分块优化缺失优化冲突优化 未来展望 背景信息 你有没有遇到过这样的场景?当你向智能助手提问:“某科技公司为何突然更换高层领导&am…...
【yolo】YOLO训练参数输入之模型输入尺寸
模型输入尺寸是YOLO训练和推理过程中非常重要的参数之一。YOLO要求输入图像的尺寸是固定的,通常为正方形(如416416、640640等)。这个尺寸直接影响模型的性能和速度。以下是对模型输入尺寸的详细介绍: 1. 模型输入尺寸的作用 统一…...