C++的引用占用内存空间吗?
前言
今天在书上看到这么一段代码:
#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
最后经过我一番百度,发现有大佬把代码进行了反汇编,发现引用实际上是一个常量指针,所以会占用一定的空间。