【C++】探索引用的本质

C++中探索引用的本质

引用是C++中常用的一个概念,引用简单来说就是一个变量的别名,而变量的本质其实就是一块内存空间的标识,变脸的引用就是变脸的别名,对引用的操作就是对所引用的变量进行操作,但这只是“引用”的文字解释,下面就来剖析一下“引用”的本质

引用的使用

#include<iostream>
using namespace std;
int main()
{
	int a = 3, b = 4, * p = &a;
	int& r = a;
	int*& rp = p;
	cout << "a=" << a << "," << "r=" << r << endl;
	cout << "p=" << p << "," << "rp=" << rp << endl;
}

上面程序的输出结果是:
在这里插入图片描述
可以看出,引用必须依附于某个确定的变量,因为引用就是这片内存空间的另一名字

引用的实现

通过一个例子来看引用在编译器中到底是如何实现的

#include<iostream>
using namespace std;
struct A
{
	char name[60];
	int size;
	int& a;
	int& b;
};
int main()
{
	cout << sizeof(A) << endl;
}

我们定义了一个结构体,其中有char类型的数组,大小为60,有一个整型的变量和两个整型的引用
在主函数中,我们通过sizeof()输出了结构体的大小

下面是运行结果:
在这里插入图片描述
我们会发现,结构体的大小为72字节,拆开来看,应该是60+4+4+4=72字节,也就是说明,引用所占的大小为4个字节,而在C++中,指针的大小也为四个字节,所以在这里,我们可以发现,

引用,其实本质上是一种指针。

对于一个确定的引用来说,它可能在不同的时候表示不同变量的别名,因此一定要在内存中为引用本身分配空间,来标识它所引用的变量。在程序运行时,变量只能依靠地址来区别,因此,只有通过存储被引用变脸的地址,在运行时才能准确定位被引用的变量。

                                                  **摘自《清华大学C++程序语言设计第4版》**

准确的说,引用是一种指针常量,也就是在我们定义引用的时候,编译器为我们执行了这样的一种操作:
Type& A<–>Type * const A
所以说,引用在表层上,是变量的别名,但是在编译器中,引用的实现也是靠指针实现的,

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值