【c++】浅讲引用

【c++】浅讲引用

  • 前言
  • 引用
    • 定义
    • 作用
      • 做输出型参数
      • 引用作返回值
      • 总结
    • 关于引用的权限
  • 结尾

前言

博主开始细学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的小优化太多了
如果不进行记录就容易忘记。

你可能感兴趣的:(c++)