引用的本质

变量名

定义:变量名是对一段空间的别名,用户可以使用变量名来使用某一段空间
所以一个空间可以有多个变量名来使用这个空间

定义

引用引入了对象的一个同义词。定义引用的表示方法与定义指针相似,只是用&代替了*。引用(reference)是c++对c语言的重要扩充。引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
其格式为:类型 &引用变量名 = 已定义过的变量名。

由于C++是一个强类型的语言,所以在引用的时候必须初始化,不然编译器就会报错
同时引用只能定义一次,不能转换为其他的变量

引用作为变量名的别名,很多场合可以代替指针
引用在作为函数的形参的时候,可以不进行初始化,因为他在传参的时候进行了初始化,这样代码就简单好认,避免了复杂的取地址操作

void swap (int& a,int& b)
{
	int c=0;
	c=a;
	a=b;
	b=c;
}

int main(int argc, char *argv[])
{
	int a=2,b=3;
	swap (a,b);
	printf ("a=%d b=%d\n",a,b);

const引用的分析

我们知道,在c语言中,如果我们对一个变量进行const修饰为只读变量,但是我们依旧可以通过指针来改变这一片空间的值,但是在c++中就变得不同了
其实我们可以通过实验发现,引用其实就是被封装起来的指针

例:const int& a=b //他就是不能被修改的,用一个常变量去初始化常引用

当引用去引用一个常量的时候,必须要加上一个const,因为自变量是没有地址储存的

const int& a =10; //这时候c++编译器会为a来分配空间
本质的分析

int& a ==== int *const a;
他的本质就是一个指针常量,所以引用的大小就是也是机器位数的大小,32位(4字节),64位(8字节)
引用只是一个别名,他隐藏了引用储存空间这一个细节,对引用的操作就是对指针所指向地址的操作,他很多时候帮我们进行了取地址操作,就像上面那个swap函数,让我们不用深入到底层
用老师的话来说,用引用和指针的区别就是开自动挡的车和手动挡的区别

引用的优点

功能性:可以满足多数需要指针的场合(本质就是指针常量)
安全性:它可以避免由于指针不当而带来的内存错误(他只能在初始化的时候定义)
操作性:简单用,又不失强大的功能(避免了很多对地址的操作)

它可以尽可能的避开内存错误

引用作为返回值

当函数返回值为引用的时候
若返回的是栈变量,则不能成为其他引用的初始值,不能作为左值使用,因为那一块内存空间已经不存在了,其实在现在的g++编译器中,这些已经被优化掉了,引用就只能使用一个变量来接收,c++在对类型的检查还是很严谨的。

C++对三木运算符的优化

当三木运算符都是变量的时候,三木运算符可以作为左值,返回的是引用变量
例子: (a>b ? a : b)=10;
这样大的可以被赋值为10
但是如果三木运算符中存在常量,编译器就会报错
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值