c++之引用

C++引用 类型 &引用名 = 引用实体(变量名);。引用在定义时必须进行初始化,并且一旦初始化后,就会一直引用该变量,不能再引用其他变量。// 定义一个引用 ref,它是 num 的别名// 通过引用修改原始变量的值ref = 20;return 0;在上述代码中,ref是num的引用,对ref的操作实际上就是对num的操作。注意引用类型必须和引用实体是同种类型的。对于基本数据类型(如intdouble等),传值和传引用的效率差异通常不大。 阅读详情

概念:

引用是给变量另外去一个别名,就类似于一个人有大名也有小名一样,别名不会另外开辟空间,和原来的变量名共用一块内存空间

使用方法:

类型&引用变量名=引用实体

int main()
{
	int a = 10;
	int& b = a;
	cout << a << endl << b << endl;
	cout << &a << endl << &b << endl;
	return 0;
}

b是a的别名,当打印a和b的地址时,是同一个地址 

注意:1.引用的类型必须和引用实体类型一致

           2.引用在定义时必须初始化,是谁的别名

           3.一个变量可以用多个引用,像a的别名可以时b,也可以是c等等

           4.引用一旦引用了一个实体,就不能在引用其他实体

int a=10;
int c=20;
int&b=a;
b=c;

这里就很好的解释了第四条注意事项,当引用了一个实体后不能在引用其他实体,b=c,b是a的别名,a和b都变成了20,这里不是把b变成c的引用

常引用:

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

1.当实体没有被const修饰时,引用被const修饰时,b=20会编译错误

2.当实体被const修饰时,引用没有被const修饰时,int&d=c会编译错误

总结:这是权限的缩小还是放大问题,实体可读可改,那引用就无所谓,当实体只能读不能改时(也就是被const修饰,只能读这个变量,不能修改里面的值)那引用只有加上const才行,不然实体只能读,而我可以通过别名去修改就说不过去了,这也就是权限的放大,权限缩小是可以的,也就是当一个实体可读可改,别名只能读,这是被允许的

int main()
{
	int a = 10;
	int& b = a;
	double& c = a;
	const double& d = a;

}

这里除了第三条都可以编译过去,第三条违反的原则是引用的实体必须和引用类型一样

第二条很明显也能编译过去,第四条在这里需要重点注意

需要明确的一点是,临时变量具有常性,这里会先生成一个临时变量,10变成10.0(类型转换,int->double)然后在d在绑定到这个临时变量身上,因为是const才可以绑定,临时变量具有常性,没有const修饰就不合法,输出是10,因为cout默认省略掉后面的0

可以通过cout<<&d和&a明显看出不是同一个地址

 使用场景:

1.做参数(有点类似于指针)

void swap(int& a, int& b)
{
	int temp = a;
	a = b;
	b = temp;
}
int main()
{
	int a = 10;
	int b = 20;
	swap(a, b);
	cout << a << endl;
	cout << b << endl;
	return 0;
}

这里a和b是别名,形参是实参的别名

2.做返回值

int test1()
{
  static int n=0;
  n++;
  return n;
}
int& test2()
{static int n=0;
  n++;
  rteturn n;
}

在test1中是平时使用的函数返回,值返回,这里会创建一个临时变量,类型是int,然后在给外面,假设临时变量叫temp,这句话就相当于int temp=n;创建一个临时变量,要开空间,这个临时对象会在函数返回时生成,并且在调用者使用完返回值之后被销毁。

在test2中使用引用返回,避免了创建临时变量,不会开临时空间,就类似int&temp=n;

int&r1=test1();
int&r2=test2();

第一个不允许,也就是违背了常引用里的第四条,因为传值返回会创建一个临时变量,r1没有const修饰,所以第一个编译不过去

第二个没有创建临时变量,没有开辟空间,是允许的。

那为什么函数体内要有static修饰呢?

无论函数传值返回还是参数传值,都会拷贝,传引用就不会,就会返回n,但引用返回时,必须指向一个函数调用结束后仍然有效的对象,也就是static修饰的变量,被放在了静态区,否则出了函数n被销毁了,那int&temp=n;会指向一个被销毁的对象,会导致未定义行为,这也间接的说明了引用返回不安全,得谨慎使用

引用和指针的区别:

1.引用在定义时必须初始化,指针没有要求int*p=NULL;

2.引用在引用一个实体后不能改变,指针可以随时指向别的实体(变量)

3.sizeof不同,引用是看引用实体的类型,指针是看32位还是64位机器

4.有多级指针int*,int**,没有多级引用

总结:

引用可以提高传参时的效率,避免创建临时空间,效率高。但实际使用场景得谨慎

引用的底层逻辑是使用指针实现。

Cpp 11 / 万能引用、引用折叠和完美转发 一、万能引用 1、英文:Universal Reference 。 2、诞生的原因 因为 C++ 中存在左值引用和右值引用,导致若想同时实现既可传入左值又可传入右值的功能,需要对相同函数进行重载,导致代码冗余。 3、解决办法 为了解决上述问题,就诞生了万能引用,具体用法如下: template<typename T> void func(T&& param) { ; } 主要实现方法是依靠 C++ 强大的模板推导能力,在编译期间确定 param 是左值. 阅读详情

相关推荐

Python实现ARIMA模型

以下是一个使用Python实现ARIMA(自回归移动平均模型)的简单示例代码。在运行代码之前,请确保已经安装了pandasnumpy和库。ARIMAorder(2,0,2)p = 2d = 0q = 2forecastmatplotlib在实际应用中,你需要将模拟数据替换为真实的时间序列数据,并且通过合适的方法(如信息准则等)来确定pdq的最佳值。除了auto_arima在使用pmdarima。

huanghm88的专栏 1736

【c++】cpp之引用

c++中引用知识点

hutaotaotao的博客 1328

吉林大学软件工程章节测验 第九章 答案+解析

4.【判断题】估算软件规模有代码行技术和功能点技术两种方法,其中代码行方法估计实现一个功能所需要的源程序行数,其不依赖项目所使用的开发语言,并且具有较好的直观性。3.【单选题】软件项目估算时,若计划人员对每个功能分别按最佳的、可能的、悲观的三种情况给出功能点估计值,记作a, m, b,则估算的期望值E的公式为( )。8.【判断题】在工程网络图中,如果在由起始事件至终止事件所构成的一条路径上,所有事件的最早时刻都和最迟时刻都相同,那么这条路径就是关键路径。4.【单选题】配置管理贯穿软件开发的整个过程。

m0_51459931的博客 1430

CPP的引用

CPP的引用,欢迎点赞,互相关照。为了梦想前进。

qq_61273847的博客 1556

PaddleOCR转ONNX模型实战:5分钟搞定中文OCR推理部署(附完整代码)

本文详细介绍了将PaddleOCR模型转换为ONNX格式并进行高效推理部署的完整实战方案。通过Paddle2ONNX工具实现模型转换,利用ONNX Runtime构建跨平台推理引擎,涵盖环境配置、模型优化、批量处理及多平台部署等关键步骤,显著提升中文OCR在边缘设备上的推理性能。

weixin_29051811的博客 617

预处理详解(三)—— 命令行定义 + 条件编译 + 文件包含

文章目录前言 前言

2021dragon的博客 2187

cpp——引用

引用是什么?

weixin_57525369的博客 3345

如何快速获取SAMM、SMIC等主流微表情数据集?完整申请指南(附避坑技巧)

本文提供了获取SAMM、SMIC等主流微表情数据集的完整申请指南,包括申请前的准备工作、分步申请流程、协议谈判技巧以及数据使用与维护策略。特别针对高分辨率动态捕捉和多模态同步数据等热词,帮助研究者高效获取高质量数据集,避免常见陷阱。

weixin_29057163的博客 421

CPP引用

通过 const 关键字定义常量引用,必须在声明时初始化。上述代码中,10 是一个字面值常量,本身不是变量,不能直接被引用。此时,如果想要修改 a 的值,是不被允许的。会提示表达式必须是可修改的左值。a = 100;常量引用主要用来修饰形参,提高安全性,防止形参改变实参。如下代码,向 test () 函数传入实参变量 a,test () 函数执行之后,输出 a 的值是 100。也就是说函数执行完成后,会对外部的变量 a 产生影响。int a = 10;这里ref是对a的常量引用。

qq_59805046的博客 839

【ANSYS APDL】提取结构刚度矩阵完整过程--附Python代码实现

ANSYS的结构刚度矩阵提取中一些操作技巧

m0_61038364的博客 1万+

CATIA文件的网页预览方案

CATIA是工业设计中广泛使用的专业软件,产出`.CATPart`或 `.CATProduct`等文件类型,当资产数量较大时,我们希望快捷预览这些文件,就有了`CATPart`文件网页预览的需求 但我们知道,网页上无法直接渲染`CATPart`这种复杂的文件, CATIA生成的文件(如 `CATPart` 和 `CATProduct`)不仅包含三维几何信息(例如点、线和曲面),还涵盖了丰富的元数据与专业设计特征。 那有没有办法,能实现CATIA文件在网页上的便捷预览?

weixin_44211633的博客 1449

引用 CPP

引用

huiohuoi的博客 1048

【示波器专题】示波器探头的原理深入——有源探头之单端有源探头

由于接地环路的苛刻要求,更高带宽的单端有源探头就算设计了也不实用。因此单端有源探头的带宽一般在6GHz以内,更高带宽的信号测量也只能使用差分有源探头(市面上有些型号的差分探头可同时兼顾单端测试)。......

一点硬件 2145

cpp中对于引用的使用

C++新增了一种复合类型——引用变量。引用是已定义的变量的别名(另一个名称)。例如,如果将twain作为clement变量的引用,则可以交替使用twain和 clement 来表示该变量。那么,这种别名有何作用呢?是否能帮助那些不知道如何选择变量名的人呢?有可能,但引用变量的主要用途是用作函数的形参。通过将引用变量用作参数,函数将使用原始数据,而不是其副本。这样除指针之外,引用也为函数处理大型结构提供了一种非常方便的途径,同时对于设计类来说,引用也是必不可少的。

Lyajpunov的博客 951

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

C++中引用与指针的区别_cpp 引用与指针的区别

学过C的朋友应该都知道指针,刚开始学习指针的时候,都会觉得指针很难,学完了指针才发现指针就是保存的地址。引用没有分配内存空间,所以访问函数形参就是访问引用的变量,是直接访问。而指针分配了内存空间用来保存变量的地址,需要通过保存的地址找到指向的变量,是间接访问。而指针在传参的时候,必须传变量的地址过去,否则不能改变变量的值。5、sizeof 引用得到的是所指向的变量(对象)的大小,而sizeof 指针得到的是指针本身的大小。6、引用访问一个变量是直接访问,而指针访问一个变量是间接访问。二、引用与指针的区别。

2401_87555420的博客 445

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C++中在一个cpp文件中引用另外一个cpp文件的方法

创建1个func2.cpp 通过include 引入func1.cpp 来使用func1里面的方法(如果有单独的头文件,比如func1.h 可以通过#include“func1.h”)C++中在一个cpp文件中引用另外一个cpp文件 可以通过导入cpp文件或者.h文件来实现,类似python中的import 导入。

小牧在一直在学习,在前进的道路上大家一起学习,进步。 8010

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Cpp】指针与引用

在C语言中,我们对指针的规范并不严谨——我们常常会用void*来传入一个不知道其变量类型的指针,为了兼容CCpp允许这样的语法存在,但是,由于这样的指针不具有安全性,我们无法通过来解引用void*,这就需要用到我们的显式转换。为了方便看指针的引用而不是由一堆组成了参数和参数类型,我们采用引用来让这种写法变得更加简洁;

Mongxin_Chan的博客 1121

c++中一个cpp文件中的类如何引用另一个cpp文件中的类成员变量及方法

A.cpp中引用B.cpp文件中的类BB的成员变量以及方法: 在B.cpp文件中定义一个全局指针 BB *b_ptr; 然后在A.cpp中 声明这个全局指针 extern BB *b_ptr; 就可以使用了! ...

Stephen 1万+

Cpp_引用

1.引用即别名int a = 10; int& b = a; // b引用了a,b是a的别名,b就是a,a就是b /* int b = a; */引用必须做初始化,而且一经初始化其所引用的目标就不能更换。引用对临时变量(匿名对象的作用)任何出现字面值常量、计算表达式、类型转换、函数返回值的场合,都会有临时变量(匿名变量)产生。只能用带有常属性(const)的引用引用这样的临时变量,而且一旦通过引用引

Jerry的专栏 2787

【Cpp】引用的本质

一、什么是引用 引用是C++中的一个新的语言特性,从表面来说,引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明如下: 类型标识符 &引用名 = 目标变量名; 这里面的&不是位运算、不是取地址,而是一个引用的标识符,可以认为是一个“类型标识符 &”类型,类型标识符是指目标变量的类型。如: int a = 10; int &b = ...

baymaxly的博客 843

Cpp中的各种引用

引用不能引用数组 引用大小测试 class MyClass { char & a; cha

weixin_43572257的博客 1366

[cpp][引用][重点][cpp初阶][一][8]详细讲解

const引用是指对常量的引用。在C++中,使用const关键字来修饰引用,它可以引用一个常量对象 or 一个不能被修改的对象主要用于函数参数传递和保护数据不被意外修改。

2301_80443197的博客 845

cpp引用

cpp引用的小笔记

wjcyaya的博客 382

cpp类的引用

引用 引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名;   引用说明:   (1)&在此不是求地址运算,而是起标识作用。   (2)类型标识符是指目标变量的类型。   (3)声明引用时,必须同时对其进行初始化。   (4)引用声明完毕后,相当于目标变量名有两个名称,即该目

weixin_54025765的博客 746

Cpp::C++11右值引用与移动构造(30)

继续!正文开始!暂时就到这里吧,因为笔者写到这里的时候下课了!总之!1.左值引用:直接引用对象以减少拷贝2.右值引用:间接减少拷贝,将 临时资源 等 将亡值 的资源通过移动构造进行转移,减少拷贝。

tan180°的博客 1036

【C++】引用

【C++】引用

weixin_60478154的博客 2238
上一篇: c++之函数重载
下一篇: c++之内联函数
Fcw0551
博客等级 码龄2年 330粉丝 115原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值