一个简单的例子:
class A{
public:
A(int v): val(v), a(val){}
int val;
int &a;
};
class B{
};
int main(){
using std::cout;
using std::endl;
cout<<sizeof(A)<<" "<< sizeof(B);
}
输出结果是:8 1
通过输出结果,我们可以得到以下结论:
- 引用在内存中也会分配空间,空间中存放的是绑定对象的地址。借用C++ primer plus中的说法,可以将引用的实现看作是一个常量指针ptr;
- 我们对引用进行操作时,实际上都是对绑定的对象进行操作的,编译器解释为对* ptr(对象的地址)进行操作。取地址时,实际上是对绑定的对象取地址。编译器将对引用取地址解释为&(*ptr)