应用,auto,内联函数

news2024/11/26 17:40:14

6.引用:

//指针
int main()
{
	int a = 0;
	int& b = a;
	int& c = b;
	int& d = c;
	cout << &a << endl;
	cout << &b << endl;
	cout << &c << endl;
	cout << &d << endl;
	b++;
	d++;
	cout << a << endl;
	return 0;
 
}

特性:

1.引用在定义的时候必须初始化

int mian()
{
	int a;//必须初始化
	int& b = a;

	return 0;
}

2.一个变量可以有多个引用

3.引用一旦引用一个实体,再不能引用其他实在体

int main()
{
	int a = 1;
	int& b = a;
	int x = 10;
	b = x;//把x的值赋给b,b依旧是a/b对象别名
	cout << b << endl;
	return 0;
}

引用作为返回值:

int& Count()
{
	int n = 0;
	n++;

	return n;
}

int main()
{
	int& ret = Count();
	
	cout << ret << endl;
	
	return 0;
}

这是一个错误事例

这里打印的ret是不确定的

如果Count函数结束,栈帧被销毁,没有清理栈帧,那么ret的结果侥幸是正确的。

如果栈帧被清理了,那么ret将会是随机值。

如上图:第一个是正确值(只是侥幸的),第二个是随机值

总结:

1.基本任何场景都可以引用传参

2.谨慎使用引用作为返回值,出了函数作用域,对象不在了,就不能引用返回值,还在的话就可以引用返回值。

错误例子:

int& Count()
{
	int n = 0;
	n++;

	return n;
}

正确例子:

int& Count()
{
	static int n = 0;
	n++;

	return n;
}

全局变量也可以

引用做参数:

1.可以减少输出型参数

2.减少拷贝提高效率(大对象尤其明显)

引用做返回值:

1.减少拷贝提高效率。

2.修改返回值+获取返回值

例子:

C语言实现查找列表中元素并修改:

int SLGet(SeqList* ps, int pos)
{
	assert(pos < 100 && pos >= 0);

	return ps->a[pos];
}

void SLModify(SeqList* ps, int pos, int x)
{
	assert(pos < 100 && pos >= 0);

	ps->a[pos] = x;
}

int main()
{
	SeqList s;
	SLModify(&s, 0, 1);
	cout << SLGet(&s, 0) << endl;

	 //对第0个位的值+5
	int ret1 = SLGet(&s, 0);
	SLModify(&s, 0, ret1+5);
    
    return 0;
}

C++引用实现:

int& SLAt(SeqList& s, int pos)
{
	assert(pos < 100 && pos >= 0);

	return s.a[pos];
}

int main()
{

	SLAt(s, 0) = 1;
	cout << SLAt(s, 0) << endl;
	SLAt(s, 0) += 5;

	return 0;
}

可以明显看出哪个更简洁明了。

引用过程中,权限可以平移或缩小,到是不可以扩大:

例子:

int main()
{
	//可以
	//引用过程中,权限可以平移或缩小
	int x = 0;
	int& y = x;//平移
	const int& z = y;//缩小
	++x;
	return 0;
}
int mian()
{
	int x = 0;
	int& y = x;
	const int& z = x;
	++x;
	++z;//不可以,权限缩小了,不可以++
	return 0;
}
int main()
{
	double dd = 1.11;
	int ii = dd;
	int& rii = dd;//权限放大了,因为有截断,会有零时变量
	//临时变量具有常性
	return 0;
}

修改: 


//修改
int main()
{
	double dd = 1.11;
	int ii = dd;
	const int& rii = dd;//权限变小了。
	return 0;
}

 

引用和指针的不同点:

引用是其实也需要空间

8.auto关键字:

int main()
{
	int arr[] = { 1,2,3,4,5 };

	for (auto a : arr)
	{
		cout << a << " ";
	}
	printf("\n");

	for (auto& a : arr)
	{
		a *= 2;
	}

	for (auto a : arr)
	{
		cout << a << " ";
	}
	printf("\n");
	return 0;
}

 

不知道数组的大小。

auto不能推导的场景:

1.auto不能作为函数的参数

2.auto不能直接用来声明数组

9.内联函数

内联函数的申明和定义不能分离。(可以直接写在头文件中)

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

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

相关文章

WEB攻防通用漏洞跨域CORS资源JSONP回调域名接管劫持

目录 一、同源策略&#xff08;SOC&#xff09; 二、跨域资源&#xff08;COSP&#xff09; 三、回调跨域&#xff08;JSOP&#xff09; 四、CORS资源跨域-敏感页面原码获取 五、JSONP 回调跨域-某牙个人信息泄露 六、子域名劫持接管 一、同源策略&#xff08;SOC&#x…

C#手麻系统源码, 基于前端Winform+后端WCF +sqlserver 开发

手麻系统源码&#xff0c;自动生成电子单据 基于C# 前端框架&#xff1a;Winform后端框架&#xff1a;WCF 数据库&#xff1a;sqlserver 开发的手术室麻醉临床信息系统源码&#xff0c;应用于医院手术室、麻醉科室的计算机软件系统。该系统针对整个围术期&#xff0c;对病人…

Buffer Pool介绍

Buffer Pool基本概念 Buffer Pool&#xff1a;缓冲池&#xff0c;简称BP。其作用是用来缓存表数据与索引数据&#xff0c;减少磁盘IO操作&#xff0c;提升效率 Buffer Pool由 缓存数据页(Page) 和 对缓存数据页进行描述的控制块 组成, 控制块中存储着对应缓存页的所属的 表空…

English Learning - L3 综合练习 1 VOA-Color 2023.04.26 周三

English Learning - L3 综合练习 1 VOA-Color 2023.04.26 周三 主题整体听一遍精听句子 1扩展 way of doing | way to do sth 句子 2扩展 Expression扩展 base 句子 3句子 4扩展 red-hot 句子 5句子 6扩展 fiery 句子 7句子 8句子 9句子 10句子 11扩展 born 句子 12句子 13句子…

Haar特征和级联分类器目标检测介绍及应用

文章目录 Haar特征和级联分类器目标检测介绍及应用1. Haar特征2. 级联分类器3. 实现步骤4.尝试训练自己的级联分类器4. 应用示例 Haar特征和级联分类器目标检测介绍及应用 Haar特征和级联分类器是一种经典的目标检测算法&#xff0c;适用于检测物体在图像中的位置、大小和姿态…

卷积神经网络算法解读

神经网络算法解读 机器学习流程&#xff1a; 数据获取特征工程建立模型评估与应用 图像数据是一个矩阵300 * 100 * 3 线性函数分类方法&#xff1a;分类&#xff08;wxb线性回归&#xff09; 损失函数&#xff1a;预测值与实际值之间的差异值 softmax分类器&#xff1a; 神…

(Python)Jupyter Notebook无法运行代码,且提示error和自动保存失败时如何操作?无法链接内核?

目录 一、报错情形 1、运行代码时跳转下一行&#xff0c;无法执行代码。 2、在修改文件名是提示失败&#xff0c;出现“error”字样。 二、深层原因 三、解决方案 四.建议使用原环境 Anaconda的Jupyter Notebook作为优秀的网页编辑器&#xff0c;非常适用于编写Python程序…

ubuntu16.04升级到20.04后报错 By not providing “FindEigen.cmake“

编译问题&#xff1a; CMake Error at modules/perception/lidar/CMakeLists.txt:14 (find_package): By not providing "FindEigen.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "Eigen&…

黑马Redis入门到实战(基础篇)

Redis基础篇 Redis的类型和常见命令以及客户端使用 目录 1 .初识Redis 1 .1 .认识NoSQL 1 .1 .1 .结构化与非结构化 1 .1 .2 .关联和非关联 1 .1 .3 .查询方式 1 .1 .4 .事务 1 .1 .5 .总结 1 .2 .认识Redis 1 .3 .安装Redis 1 .3 .1 .依赖库 1 .3 .2 .上传安装包并解压 1 .3 .…

音视频八股文(8)-- h264 AnnexB三层结构

NALU(Network Abstract Layer Unit) ⾳视频编码在流媒体和⽹络领域占有重要地位&#xff1b;流媒体编解码流程⼤致如下图所示&#xff1a; H264简介 H.264从1999年开始&#xff0c;到2003年形成草案&#xff0c;最后在2007年定稿有待核实。在ITU的标准⾥称为H.264&#xff0c…

使用QtInstallerFramework制作安装包总结

一、linux下使用QtInstallerFramework制作安装包 4.0.1版本的QtInstallerFramework-linux-x64.run在linux中运行报错&#xff1a; libdbus-1.so.3 no version information availabe 换成3.0.4版本的就好了&#xff1a;https://download.qt.io/official_releases/qt-installer-…

GEE:MODIS计算遥感指数(NDVI、BSI、NDSI、EVI、LSWI、SIPI、EBI等)

作者:_养乐多_ 本文将介绍如何使用Google Earth Engine(GEE)进行遥感影像分析,具体地,使用MODIS数据集计算和可视化几种植被指数,以评估植被生长的状况,或者作为随机森林分类器训练需要的特征变量。 主要包括,NDVI、BSI、NDSI、EVI、LSWI、SIPI、EBI等。 NDVI(Normal…

【PCIE体系结构六】TLP路由

&#x1f449;个人主页&#xff1a;highman110 &#x1f449;作者简介&#xff1a;一名硬件工程师&#xff0c;持续学习&#xff0c;不断记录&#xff0c;保持思考&#xff0c;输出干货内容 参考书籍&#xff1a;PCI_Express体系结构导读 目录 TLP路由 地址路由 ID路由 隐式路…

介绍一款idea神级插件【Bito-ChatGPT】而且免费!

什么是Bito&#xff1f; Bito是一款在IntelliJ IDEA编辑器中的插件&#xff0c;Bito插件是由ChatGPT团队开发的&#xff0c;它是ChatGPT团队为了提高开发效率而开发的一款工具。ChatGPT团队是一支专注于自然语言处理技术的团队&#xff0c;他们开发了一款基于GPT的自然语言处理…

云原生CAx软件: HTTP基础知识汇总

随着云原生(Cloud Native)的兴起&#xff0c;面向服务架构(Service-Oriented Architecture&#xff0c;SOA)、微服务(Microservice)、容器(Container)等相关概念与技术正在逐渐影响CAx(CAD/CAE/CAM)软件的架构设计与开发。 在云原生CAx软件中&#xff0c;首先需要把系统按照功…

vue3表单输入绑定

初识表单输入绑定 vue3可以帮助我们将vue定义的变量绑定到html表单元素上&#xff0c;并且监听到html表单元素修改值时&#xff0c;会将对应的vue定义的变量修改。 <!-- 将vue3定义的text绑定给inut元素, 当input元素发生input输入事件时, 将修改vue3定义的text --> <…

Linux常用操作命令

目录 一. Linux命令格式 二. 文件目录操作命令 文件目录操作命令 ls 文件目录操作命令 cd 文件目录操作命令 cat 文件目录操作命令 more 文件目录操作命令 tail 文件目录操作命令 mkdir 文件目录操作命令 rmdir 文件目录操作命令 rm 三. 拷贝移动命令 拷贝移动命令 …

STM32 学习笔记_6 定时器中断(上)

TIM 定时器是功能最强大&#xff0c;内容最复杂的32结构。 之前51用过的功能&#xff0c;定时产生中断。输出比较&#xff0c;常用于产生 PWM 波形&#xff0c;驱动电机等。输入捕获&#xff0c;测量方波频率。编码器&#xff0c;读取正交编码器的波形。 最大定时时间&#…

关于repeater录制的流量子调用的identity中带有~S的情况

前段时间同事问我&#xff0c;我们录制的流量中&#xff0c;尤其是dubbo的子调用显示经常他的末尾会带上一个小尾巴这个是什么意思呢&#xff0c;其实之前我没有太在意这个事情&#xff0c;只是同事这么疑问了&#xff0c;确实激起了好奇心&#xff0c;所以就差了下 到底是什么…

HTML(四) -- 多媒体设计

目录 1. 视频标签 2. 音频标签 3. 资源标签&#xff08;定义媒介资源 &#xff09; 1. 视频标签 属性值描述autoplayautoplay如果出现该属性&#xff0c;则视频在就绪后马上播放。controlscontrols表示添加标准的视频控制界面&#xff0c;包括播放、暂停、快进、音量等…