C++的引用占用内存空间吗?

861

前言

今天在书上看到这么一段代码:

#include <iostream>
using namespace std;

int f;

class CDemo {
	private:
		const int num;	//常量型成员变量 
		int &ref;	//引用型成员变量 
		int value;
	public:
		CDemo(int n) : num(n), ref(f), value(4)
		{
			
		}
};

int main()
{
	cout << sizeof(CDemo) << endl;
	return 0;
}

我认为的:两个int类型,一共8字节
实际上:输出12
说好的引用类型不占空间呢??怎么最后还是占了4B

原因

在我一顿操作后,代码变成了下面这样

#include <iostream>
using namespace std;

double f;

class Test {
	private:
		double &ref;
	public:
		Test():ref(f)
		{
			
		}
};

int main(int argc, char *argv[])
{
	Test t;
	double &ref2 = f;
	cout << sizeof(Test) << endl;
	cout << sizeof(t) << endl;
	cout << sizeof(ref2) << endl;
	return 0;
}

对比输出类的大小和输出引用类型的大小可以发现:

  • 引用会占用一定的空间,所以输出类的大小为8字节
  • 引用不会占用被引用对象的空间,引用只是一个别名,所以ref2的大小是4B

最后经过我一番百度,发现有大佬把代码进行了反汇编,发现引用实际上是一个常量指针,所以会占用一定的空间。