C++ 引用的理解

上次写了一些关于形参实参传值的理解
函数要是不传地址的话,一些涉及到地址的函数比如交换函数就无法实现它的功能
那么要是想通过想通过形参修改实参呢,这样就可以引入 引用这个概念了

首先来看看引用的声明和定义:

int a = 10;
int& ra = a;

上面的代码就是 ra 引用了 a,就像给 a 起了一个外号叫做 ra

这个 ra 的特点就是,内存不会给引用变量 ra 开辟新的内存空间,也就是说 ra 和 a 的地址是一样的,这里就不放截图了,可以自己在IDE取地址看看.

引用的特性如下
特性:
1. 引用在定义时必须初始化
2. 一个变量可以有多个引用
3. 引用一旦引用一个实体,再不能引用其他实体

接下来就是常引用了
首先我们知道const 定义的常量是不允许被修改的,用const定义的常量是不能被普通的引用的
比如

const int a = 10;
int& ra = a;

上面的代码不会通过编译,因为 a 是一个常量,不能被修改,那么如何定义呢

const int& ra = a;

这样就行

辣么,引用的应用场景有哪些呢?
首先,在一些方面会方便一些
比如

struct A {
int b;
};

int main() {
	A aa;
	int& rb = aa.b;
	return 0;
}

比如在调用结构体里面的变量的时候,把 aa.b 替换成 rb ,可能会方便一些

然后就是做参数了

看下面的代码

void Swap(int& left, int& right) {
	int temp = left;
	left = right;
	right = temp;
}
int main() {
	int a = 10;
	int b = 20;
	Swap(a, b);
	return 0;
}

引用变量作为参数,可以不用取地址就修改实参的值

但是有一个缺陷,随意修改实参的值可能会导致错误, 解决的方法就是:

//保护实参安全,加上const使得形参不会改变实参
void Print(const int& ra) {
	cout << ra << endl;
}
int main() {
    int a = 10;
	Print(a);
	return 0;
}

可以保护实参,不被修改

接下来还可以做函数的返回值

//返回结果的生命周期不受函数控制(实体的生命周期要比函数长)
int& Add(int left,int right) {//int & ret=main函数里Add函数返回的值
	int ret = left + right;
	return ret;
}
int main() {
	int& ret = Add(1, 2);//这个ret相当于Add中ret的别名
	Add(3, 4);
	return 0;
}

Add 的返回值是 int& ,主函数中的 ret 就是 Add 函数里 ret 的引用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值