【c++】浅讲引用

文章介绍了C++中的引用概念,它作为变量的别名,不占用额外内存。引用用于做输出型参数可改变实参,但作为返回值需谨慎,因函数结束时局部变量可能被销毁。使用静态变量可解决返回引用的问题。引用的权限不能放大,只能缩小或保持不变。
摘要由CSDN通过智能技术生成

前言

博主开始细学c++和linux了
这次就带来浅学了的引用。

引用

定义

引用不是在内存中开辟一个新空间的新变量
类似于给变量取别名,和取别名的对象在空间中公用一个对象
例:

int a=0; int &b=a
这里创建了一个变量a
同时创建了一个a的引用b
此时a和b都指向的同一块空间,就是说a和b的改变都会改变对方

使用注意事项:
1.同时一个变量可以有多个引用,就像一个人可以有多个别名
2.创建别名后必须要进行初始化,指明是谁的别名

作用

做输出型参数

这个讲的可能有点抽象,说具体点的作用呢就是:
可以通过传形参,来改变实参(类似于指针)
例:

Void swap(int& a,int& b)//形参是实参的别名
//所以可以改变实参
{
int tmp=a;
a=b;
b=tmp;
}

这里将形参中传了引用,代表形参传入的是实参的一个引用。
传入的是和实参代表同一块内存空间的引用
所以这里a和b的改变可以改变实参。

引用作返回值

一般来说我们使用函数返回时
是直接使用 return 函数来进行的
例:

int count()
{
	int n=0;
	return n;
} 
int main()
{
 int tmp=count();
}

这个tmp在接受return n时,不是直接传参的,因为临时变量所在的栈帧要进行销毁
在进行销毁时,会将需要return的值存入一个临时变量中
然后赋值给tmp

但是当我们使用引用返回时,就可以跳过这个步骤

int& count()
{
	int n=0;
	n++;
	return n;
} 

这里的int& 代表了返回的值时一个引用值。
但是这样真的对吗?
仔细看看,我们这里return n就是指返回了n的引用值
当函数栈帧被销毁时,内存使用权返回给系统
返回的引用值指向的是n这个内存空间,但是此时n这个空间已经被销毁了
所以可能会产生随机值的情况

这里我们应该怎么解决呢?
既然n会被函数销毁,那我们让n不被销毁不就行了

int& count()
{
	Static Int n=0;
	n++;
	return n;
} 

这样加了个const。
就让n存储在了静态区中,不会被销毁

总结

1:任何场景都能用引用传参
2:引用做返回值谨慎使用,当返回的引用指向对象的值存在时可以用引用,不存在则不用

关于引用的权限

引用过程中权限不能放大,只能缩小和平移
例:
Const int a=0;
Int& b=a;
这里权限放大,a自己都不能改变自己
而将a的引用赋值给b后,b就可以改变a
这显然是不合理的,所以不可用

Int a=0;
Contest int& b=a;
这里权限缩小,本来a可以被改变,而引用b权限缩小
选择不进行对a改变
所以合理
Int a=0;
Int &b=a
这里权限平移,完全ok

结尾

这里只是浅浅讲了一个c++的引用功能
因为c++刚开始学,这种对c的小优化太多了
如果不进行记录就容易忘记。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想学c啊啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值