您的位置:首页 > 编程语言 > C语言/C++

C++中引用的底层实现

2016-09-04 22:05 302 查看

为了研究一下C++中引用的底层实现,写了一个小代码验证其中的基本原理。

引用是一个变量的别名,到底会不会为引用申请内存空间?如果申请空间,空间存放的是什么,下面的代码就主要解决这个疑问。

代码如下,详细见代码注释

#include <iostream>
#include<string>
#include <vector>
#include <algorithm>
using namespace std;

class Test
{
public:
int val;
int &ref_val;
Test():val(0xFFFFFFFF),ref_val(val)
{
}
};

int main()
{
Test obj;
cout << sizeof(obj)<<endl;//VS2008中,win7 32位中结果为8,说明引用也是有内存空间的
cout << &obj<<endl;//0x001BFA28
cout << &(obj.val)<<endl;//0x001BFA28
cout << &(obj.ref_val)<<endl;//0x001BFA28

int i=0x01010101;
int *ptr = &i;//
cout << &i<<endl;
cout << ptr <<endl;
cout <<&(*ptr)<<endl;

return 0;
}

通过输出,可以得出如下结果

1、引用在内存中也会分配空间,空间中存放的事被引用变量的地址,因此可以将引用看作为一个常量指针ptr;

2、对引用取地址操作,其实是对被引用变量取地址,编译器将对引用取地址解释为&(*ptr)取地址,代码中第29行印证了这一个说法

运行结果

调试时的内存结果(内存结果可以看出是小端little-ending模式)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: