C ++中的引用如何工作?他们为什么需要记忆?

时间:2013-11-16 07:37:48

标签: c++ reference

他们所说的引用与原始变量具有相同的地址,那么为什么它们会消耗内存。 参考这篇文章 Reference in place of getters? 在这个例子中,如果我作为类成员引用类的大小增加。

编辑1

感谢大家的答案。

以下是我在VS 2010 Express上获得的输出

该计划:

class X
{
    int i;
    int &I;
public:
    X():I(i){}
}x;

class Y
{
    int i;
public:
    Y(){}
}y;

int main()
{
    int j =0;
    int &J = j;

    return 0;
}

观看窗口: Watch Window

拆卸:

int main()
{
01101390  push        ebp  
01101391  mov         ebp,esp  
01101393  sub         esp,0D8h  
01101399  push        ebx  
0110139A  push        esi  
0110139B  push        edi  
0110139C  lea         edi,[ebp-0D8h]  
011013A2  mov         ecx,36h  
011013A7  mov         eax,0CCCCCCCCh  
011013AC  rep stos    dword ptr es:[edi]  
    int j =0;
011013AE  mov         dword ptr [j],0  
    int &J = j;
011013B5  lea         eax,[j]  
011013B8  mov         dword ptr [J],eax  

    return 0;
011013BB  xor         eax,eax  
}

看起来这至少与VS中的指针一样实现。

2 个答案:

答案 0 :(得分:3)

引用通常使用指针实现。但请注意,该标准明确指出(C ++ 11 8.3.2 / 4 - “参考文献”):

  

未指明引用是否需要存储(3.7)。

答案 1 :(得分:2)

存储引用本身需要空间。实际上与指针大小相同。