void f (int& a)
{
a ++;
}
int main ()
{
int b = 5;
f(b);
cout << b << endl; //prints 6
}
当我在C ++中看到引用的语法时,它最初看起来像变量b(如果它是一个对象)将被复制到f中。这些引用如何实际工作? (一些简单的asm会很棒。)
答案 0 :(得分:3)
在这种情况下,pass-by-reference最有可能使用指针语义 - 即对象的地址可能作为参数传递。\
当我在C ++中看到引用的语法时,它最初看起来像变量b(如果它是一个对象)将被复制到f。
不。这是参考的好处之一 - 没有复制。
f(b);
00DF1405 lea eax,[b]
00DF1408 push eax
00DF1409 call f (0DF1177h)
00DF140E add esp,4
eax
将包含b
的地址,然后将其推送到函数参数堆栈。
答案 1 :(得分:2)
在C ++引擎的引擎下完全像指针一样实现。唯一的区别是一些编译时检查和不同的语法。 所以在你的情况下,函数f得到一个指向整数b的“指针”,并递增b的值。