int a = 0;
int &ar = a;
在C++中直接sizeof ar或& ar 得到的地址大小和首地址与a相同,这就造成了不占内存,仅为别名的假象
通过一个包含 引用的类可以看出
#include <iostream>
using namespace std;
class refClass{
private:
double& ref;
public:
refClass(double var = 4.00) :ref(var){
cout << sizeof(var) << endl;
}
};
int main()
{
double *p;
cout << sizeof(double) << endl;//8
cout << sizeof(p) << endl;//4
cout << sizeof(refClass) << endl;//4
return 0;
}
引用的本质上就是一个常量指针,其所占内存与指针相同。
2020.09.23
这段代码是Ubuntu16.04 64位机 GCC5.4版本 用c++11标准编译
这里添加一个对比,把double换成int应该更容易理解
#include <iostream>
using namespace std;
class Anilmal{
private:
double a;
};
class Anilmal2{
private:
double a;
double& b = a;
};
int main(){
int *p;
cout << "not & sizeof = "<<sizeof(Anilmal) << endl;
cout << "& sizeof = "<<sizeof(Anilmal2) << endl;
cout << "* sizeof = "<<sizeof(p) << endl;
}
结果是
not & sizeof = 8 //改成int为4
& sizeof = 16
* sizeof = 8