C++(入门2)

news2024/11/25 3:04:28

承接上C++(入门1):CSDN

引用:(类似指针但不同于指针,后续会将两则不同)

概念

引⽤不是新定义⼀个变量,⽽是给已存在变量取了⼀个别名,编译器不会为引⽤变量开辟内存空间, 它和它引⽤的变量共⽤同⼀块内存空间。(类似于一个人有自己的名字还有其他外号,但都是只这个人)

定义

类型& 引⽤别名 = 引⽤对象;

案列理解:

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int main() {
	int a = 10;
	printf("a=%d\n",a );
	//对a取别名
	int& b = a;
	printf("b=%d\n",b);
	//对a取别名
	int& c = a;
	printf("c=%d\n",c);
	//对b取别名
	int& d = b;
	printf("d=%d\n",d );
	//对d取别名
	int& e = d;
	printf("e=%d\n",e );
	return 0;
}

由上述案例可知,给变量取别名,取别名后的变量与原变量相同,修改某一个别名后,原变量也会跟着变。

优于指针的一个实践:

我们刚学指针的时候,交换两个数值的案列大家应该还知道,接下来就用引用来解决。

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
void temp(int& a1,int &b1) {
	int tem = a1;
	a1 = b1;
	b1 = tem;
}
	int main() {
	int a = 10;
	int b = 20;
	cout << "交换前a=:" << a << " b=:" << b << endl;
	temp(a, b);
	cout << "交换后a=:" << a << " b=:" << b << endl;
	return 0;
}

这样一来我们就不需要在传地址,只需起个别名就可以实现交换功能。

引⽤的特性

• 引⽤在定义时必须初始化(明确给那个变量取别名)

• ⼀个变量可以有多个引⽤ (给一个变量取多个别名)

• 引⽤⼀旦引⽤⼀个实体,再不能引⽤其他实体

引用其他实体后,只修改值不修该指向(地址)

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
int main() {
	int a = 10;
	int& b = a;
	cout << a << " " << b << endl;
	cout << &a << endl;
	cout << &b << endl;
	int d = 20;
	//这时复制的是d的值,并没有改变b的指向
	b = d;
	cout << a << " " << b << endl;
	cout << &a << endl;
	cout << &b << endl;
	cout << &d << endl;
	return 0;
} 

引⽤的使⽤

• 引⽤在实践中主要是于引⽤传参和引⽤做返回值中减少拷⻉提⾼效率和改变引⽤对象时同时改变被 引⽤对象。 比特就业课

• 引⽤传参跟指针传参功能是类似的,引⽤传参相对更⽅便⼀些。

• 引⽤返回值的场景相对⽐较复杂,我们在这⾥简单讲了⼀下场景,还有⼀些内容后续类和对象章节 中会继续深⼊讲解。

• 引⽤和指针在实践中相辅相成,功能有重叠性,但是各有特点,互相不可替代。C++的引⽤跟其他 语⾔的引⽤(如Java)是有很⼤的区别的,除了⽤法,最⼤的点,C++引⽤定义后不能改变指向, Java的引⽤可以改变指向。 

const引用

• 可以引⽤⼀个const对象,但是必须⽤const引⽤。

int main() {
	//可以引⽤⼀个const对象,但是必须⽤const引⽤。
	const int a = 10;
	const int& ra = a;
	return 0;
}

const引⽤也可以引⽤普通对象。

int main() {
	//可以引⽤⼀个const对象,但是必须⽤const引⽤。
	int a = 10;
	const int& ra = a;
	return 0;
}

总结:对象的访问权限在引⽤过程中可以缩⼩,但是不能放⼤。

const引用常量

int main(){
 const int& ra=30;
return 0;
}

const引用表达式

int main() {
	const int a = 10;
	int b = 20;
	const int& ra = (a + b);
	return 0;
}

const引用不同类型

int main() {
	double a = 22.222;
	const int& ra = a;
	return 0;
}

像上面一些场景,常量30,b表达式(a+b),double型22.222,都先存在临时对象,⽽C++规定临时对象具有常性(常性:就认为被const修饰),所以这⾥ 就触发了权限放⼤,必须要⽤常引⽤才可以。

• 所谓临时对象就是编译器需要⼀个空间暂存表达式的求值结果时临时创建的⼀个未命名的对象, C++中把这个未命名对象叫做临时对象。

注意:const使用场景主要是传值使用,小编还未学到,暂时先行了解到此。

引用和指针的关系

C++中指针和引⽤就像两个性格迥异的亲兄弟,指针是哥哥,引⽤是弟弟,在实践中他们相辅相成,功能有重叠性,但是各有⾃⼰的特点,互相不可替代。

• 语法概念上: 引⽤是⼀个变量的取别名不开空间,指针是存储⼀个变量地址,要开空间

• 引⽤在定义时必须初始化(给谁取别名),指针建议初始化,但是语法上不是必须的。

• 引⽤在初始化时引⽤⼀个对象后,就不能再引⽤其他对象;⽽指针可以在不断地改变指向对象。 • 引⽤可以直接访问指向对象,指针需要解引⽤才是访问指向对象。

• sizeof中含义不同,引⽤结果为引⽤类型的⼤⼩,但指针始终是地址空间所占字节个数(32位平台下 占4个字节,64位下是8byte)

• 指针很容易出现空指针和野指针的问题,引⽤很少出现,引⽤使⽤起来相对更安全⼀些。

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

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

相关文章

c语言第六天笔记

分支结构 分支结构&#xff1a;又被称之为选择结构 概念 选择结构&#xff1a;根据条件成立与否&#xff0c;选择相应的操作。 条件构建 关系表达式&#xff1a;含有关系运算符的表达式&#xff08;>,,&#xff09; 逻辑表达式&#xff1a;含有逻辑运算符的表达式&…

网络安全相关工作必须要有证书吗?

在当今数字化时代&#xff0c;网络安全已成为至关重要的领域。然而&#xff0c;对于从事网络安全相关工作的人员来说&#xff0c;证书是否是必不可少的呢? 一、网络安全证书的重要性 网络安全证书在一定程度上能够证明从业者具备相关的知识和技能。例如&#xff0c;CISP 作为国…

基于LLM开发AI应用竟如此简单

一、什么是LLM 随着人工智能技术的不断发展&#xff0c;越来越多的企业和机构开始将其应用于各个领域。其中&#xff0c;基于语言模型的人工智能技术&#xff08;LLM&#xff09;在自然语言处理、文本生成等方面表现出色&#xff0c;被广泛应用于各种场景中。 LLM是一种基于大…

你们要的“轮子”来了!67 个仓颉语言三方库正式公开!

01 Cangjie-TPC社区简介 Cangjie-TPC&#xff08;Third Party Components&#xff09;用于汇集基于仓颉编程语言开发的开源三方库&#xff0c;帮助开发者方便、快捷、高质量构建仓颉程序。 Cangjie-TPC社区联合软通动力、宝兰德、普元、上汽以及社区开发者共同完成第一批常用…

快速设置 terminator 透明背景

看图&#xff0c;按步骤设置后⭐重启一个终端则为透明效果 效果展示&#xff1a;

vscode+platformio开发小技巧

使用vscodeplatformio开发&#xff0c;具体安装配置文章很多&#xff0c;这里分享一些方便使用的小技巧&#xff0c;让使用体验在不增加学习成本的情况下更加丝滑。 1、配置依赖库 在使用vscode开发前&#xff0c;arduino环境遗留了一些库文件&#xff0c;这些第三方库可以通…

(20240801)矿山固废基胶凝材料及混凝土中文期刊整理

一、篇名:固废 级别:EI + 篇名:固废混凝土/水泥/胶砂/胶凝材料 级别:EI

Flat Ads资讯:Meta、Google、TikTok 7月产品政策速递

Flat Ads拥有全球媒介采买(MediaBuy)业务,为方便广告主及时了解大媒体最新政策,Flat Ads将整理大媒体产品更新月报,欢迎大家关注我们及时了解最新行业动向。 一、Meta 1、Reels 应用推广现可突出显示应用评分、点评和下载量 为了不断优化 Instagram 上的广告体验和广告表现,…

攻防世界之《这个按钮做什么》题解

下载解压后&#xff0c;发现只有一个文件。 放入exeinfope软件里看看 根据activity猜测可能是安卓软件&#xff0c;修改文件后缀为.apk 然后用模拟器打开这个软件并会自动安装。 打开软件界面如下&#xff1a; 看得出来只有一个密码输入框&#xff0c;应该找到对应的密码就会…

【游戏引擎之路】登神长阶(八)——Python之旅行,休息一下,去看看新世界

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 6月23日-7月1日&#xff1a;攻克《Windows游戏编程大师技巧》。 7月…

数据结构(其二)--线性表(其二)

目录 5.栈 5.1 栈的基本操作 5.2 各种栈 &#xff08;1&#xff09;.顺序栈 i.普通顺序栈 ii.共享栈 iii.关于销毁 &#xff08;2&#xff09;.链栈 6.队列 6.1 队列的基本操作 6.2 各种队列 &#xff08;1&#xff09;.循环队列 i.代码 ii.另外一种写法 &#xff08;…

滴滴官宣潘展乐为滴滴网约车“快”乐大使

近日&#xff0c;滴滴宣布邀请游泳运动员潘展乐成为滴滴出行网约车“快”乐大使&#xff0c;同时开展打车确定性体验攻坚计划&#xff0c;上线3分钟无车赔活动&#xff0c;为司机发放高温补贴、流水加速卡等多重奖励&#xff0c;共同为用户提供更快、更便捷的出行体验。 作为男…

机器学习-29-多变量异常检测在区域供热系统中的应用(实战)

参考多变量异常检测:工业数据分析中的异常检测技术 1 多变量异常检测 在工业数据分析需求中,异常检测是数据分析和监控(如系统操作错误、异常情况、潜在和实际故障等)的关键技术。与传统的单变量异常检测(逐一检查每个变量/指标)不同,多变量异常检测考虑了多个变量之间…

小程序准备上线,软件开发公司需要提供哪些资料给甲方?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

基于N32L406的EasyLogger日志库移植教程

首先感谢作者 https://github.com/armink/EasyLogger EasyLogger 简介 EasyLogger是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C 日志库&#xff0c;非常适合对资源敏感的软件项目&#xff0c;例如&#xff1a; IoT 产品、可穿戴设备、智能家居等等。相比 log4c…

掌握录屏软件的快捷录制技巧!2024最新推荐这四款屏幕录制软件~

你是否曾希望捕捉电脑屏幕上的精彩瞬间&#xff1f;无论是游戏剪辑、教学视频还是会议记录&#xff0c;屏幕录制已成为我们数字生活中不可或缺的一部分。 面对屏幕录制的挑战&#xff0c;选择一款合适的录屏软件至关重要。市场上的录屏软件种类繁多&#xff0c;从专业级到用户…

应用地址信息获取新技巧:Xinstall来助力

在移动互联网时代&#xff0c;应用获取用户地址信息的需求越来越普遍。无论是为了提供个性化服务&#xff0c;还是进行精准营销&#xff0c;地址信息都扮演着至关重要的角色。然而&#xff0c;如何合规、准确地获取这一信息&#xff0c;却是许多开发者面临的挑战。今天&#xf…

如何选择最佳Mac数据恢复程序?10大 Mac 数据恢复软件评测

当您的手机或相机已满时&#xff0c;Mac 将成为存储您的照片、视频、音乐和其他重要数据的数据管理器。 然而&#xff0c;一旦珍贵的数据因为意外删除或未知原因而丢失&#xff0c;您一定会感到非常难过。 幸运的是&#xff0c;这篇文章收集了适用于 Mac 的最佳数据恢复软件。…

超声波眼镜清洗机哪款好用?品质上等的超声波清洗机评选

对于佩戴眼镜的人来说&#xff0c;眼镜清洁是一个必须面对的问题。然而&#xff0c;简单地用眼镜布擦拭并不能彻底清洁眼镜&#xff0c;这种方法不仅可能无法清除所有的视力&#xff0c;还容易划伤镜片表面。相比之下&#xff0c;超声波清洗机的作用非常显着。它采用了不直接接…

[ACTF2020 新生赛]BackupFile1

打开题目 利用disearch扫描&#xff0c;发现源文件index.php.bak 下载下来 打开文件 代码审计&#xff0c;翻译一下 翻译代码为&#xff1a; <?php include_once "flag.php"; //这一行使用 include_once 函数来包含&#xff08;或插入&#xff09;另一个 PHP …