《C++避坑神器·二》引用的本质分析

本文详细解析了C++中的引用概念,包括引用声明与初始化、作为函数返回值、左值特性,以及引用的本质——指针常量。强调了引用是变量别名,地址不可变但值可变的特点,以及常量引用的特殊性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概要

` 引用的本质分析

技术细节

关于引用:
(1)申明引用的同时必须要初始化
(2)引用变量是目标变量的一个别名,相当于目标变量,只是名字不同
(3)申明一个引用不是定义了新的变量,只是目标变量的一个别名,引用本身不是一种数据类型,因此不占存储单元,系统也不会给引用分配存储单元
(4)对引用求地址,就是对目标变量求地址
(5)在被调函数中交换主调函数的两个值,常用方法传递变量地址,第二种就是传递引用
(6)引用一旦初始化就不可以更改

int i = 10;
int &b = i;  //现在b就是变量i的别名
int j = 100;
b = j;  //并没有把b转变为变量j的别名,这里相当于把100赋值给b,又因为b是变量i的别名,也就相当于把100赋值给i`

(7)引用可以作为函数返回值

int &f()
{
	static int i = 10; //静态局部变量,在全局区,静态变量等到整个程序运行结束后才会释放
	return i;
}

main()
{
	int &p = f(); //返回的静态变量要等到整个程序运行结束才释放
	cout << p << endl; //10
}

(8)如果函数的返回值是引用,这个函数可以作为左值

int &f()
{
	static int i = 10;
	return i; 
} 

main()
{	
	int &p = f(); //函数返回引用给p,此时引用p是变量i的一个别名
	f() = 100; //函数返回变量i值,这时变量i又被赋值100,又因为上面p是变量i的别名,等于p被赋值100
	cout << p << endl; //100 
}

引出引用的本质:
引用的本质是指针常量,地址不可变,值可变

int a = 10;
int &b = a;  //实际是int * const b = &a;
b = 20;  //实际是*b = 20

延申:常量引用本质就是常量指针常量

int i = 10;
int &p = i; //给引用赋的是变量,如果int &p = 10; 直接赋常量报错
const int &p = 10; //常量引用可以直接赋值,编译器做了一个默认操作,int tmp = 10;然后const int &p = tmp;  而且常量引用值是不可以修改的,因为常量引用本质是常量指针常量,const int * const p = &tmp;

小结

引用的本质是指针常量,地址不可变,值可变

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦回阑珊

一毛不嫌多,一分也是爱

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

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

打赏作者

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

抵扣说明:

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

余额充值