可能重复:
参考是如何在内部实现的?
void f (int& a)
{
a ++;
}
int main ()
{
int b = 5;
f(b);
cout << b << endl; //prints 6
}
当我看到 C++ 中引用的语法时,最初看起来变量 b(如果它是一个对象)将被复制到 f 中。这些引用实际上是如何在幕后工作的?(一些简单的 asm 会很棒。)
可能重复:
参考是如何在内部实现的?
void f (int& a)
{
a ++;
}
int main ()
{
int b = 5;
f(b);
cout << b << endl; //prints 6
}
当我看到 C++ 中引用的语法时,最初看起来变量 b(如果它是一个对象)将被复制到 f 中。这些引用实际上是如何在幕后工作的?(一些简单的 asm 会很棒。)
在这种情况下,按引用传递最有可能使用指针语义 - 即对象的地址可能作为参数传递。\
当我看到 C++ 中引用的语法时,最初看起来变量 b(如果它是一个对象)将被复制到 f 中。
没有。这是参考文献的好处之一——没有复制。
f(b);
00DF1405 lea eax,[b]
00DF1408 push eax
00DF1409 call f (0DF1177h)
00DF140E add esp,4
eax
将包含 的地址b
,然后被压入函数参数堆栈。
C++ 引用的底层实现与指针完全一样。唯一的区别是一些编译时检查和不同的语法。因此,在您的情况下,函数 f 获得一个指向整数 b 的“指针”并增加 b 的值。