0

可能重复:
参考是如何在内部实现的?

void f (int& a)
{
    a ++;
}

int main ()
{
    int b = 5;
    f(b);
    cout << b << endl; //prints 6
}

当我看到 C++ 中引用的语法时,最初看起来变量 b(如果它是一个对象)将被复制到 f 中。这些引用实际上是如何在幕后工作的?(一些简单的 asm 会很棒。)

4

2 回答 2

3

在这种情况下,按引用传递最有可能使用指针语义 - 即对象的地址可能作为参数传递。\

当我看到 C++ 中引用的语法时,最初看起来变量 b(如果它是一个对象)将被复制到 f 中。

没有。这是参考文献的好处之一——没有复制。

    f(b);
00DF1405  lea         eax,[b]  
00DF1408  push        eax  
00DF1409  call        f (0DF1177h)  
00DF140E  add         esp,4  

eax将包含 的地址b,然后被压入函数参数堆栈。

于 2012-09-18T09:01:41.543 回答
2

C++ 引用的底层实现与指针完全一样。唯一的区别是一些编译时检查和不同的语法。因此,在您的情况下,函数 f 获得一个指向整数 b 的“指针”并增加 b 的值。

于 2012-09-18T09:04:24.283 回答