C++ 变量作为参数在C++;?

C++ 变量作为参数在C++;?,c++,pointers,assembly,reference,C++,Pointers,Assembly,Reference,可能重复: void f(int&a) { a++; } int main() { int b=5; f(b); cout在这种情况下,pass-by引用很可能使用指针语义,即对象的地址可能作为参数传递\ 当我看到C++中引用的语法时,最初看起来像变量B(如果是对象)会被复制到f 不,这是参考文献的优点之一——不复制 f(b); 00DF1405 lea eax,[b] 00DF1408 push eax 00DF1409 call

可能重复:

void f(int&a)
{
a++;
}
int main()
{
int b=5;
f(b);

cout在这种情况下,pass-by引用很可能使用指针语义,即对象的地址可能作为参数传递\

当我看到C++中引用的语法时,最初看起来像变量B(如果是对象)会被复制到f

不,这是参考文献的优点之一——不复制

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

eax
将包含
b
的地址,然后被推送到函数参数堆栈上。

在这种情况下,通过引用传递很可能使用指针语义,即对象的地址可能作为参数传递\

当我看到C++中引用的语法时,最初看起来像变量B(如果是对象)会被复制到f

不,这是参考文献的优点之一——不复制

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

<代码> EAX将包含“代码> B<代码>地址,然后推送到函数参数栈。

< P>在C++引用中的引擎盖下实现,就像指针一样。唯一的区别是一些编译时检查和不同的语法。
因此,在你的情况下,函数F得到一个指向整数B的“指针”,并在C++中的引擎盖下增加B.< /P> < P>的值,就像指针一样,唯一的区别是一些编译时检查和不同的语法。
在你的例子中,函数f得到一个“指针”到整数b并增加b的值。

引用只是原始变量的别名。对引用的任何修改都将修改所引用的变量。不涉及复制。标准未明确说明引用实现方式的确切细节。尽管如此,大多数编译器只是使用point编译器将为您提供示例asm--查找用于输出未装配代码的选项或用于分解其二进制输出的工具。引用只是原始变量的别名。对引用的任何修改都将修改所引用的变量。不涉及复制。h标准未指定如何实现引用。尽管如此,大多数编译器只是使用指针来实现引用。您的编译器将为您提供示例asm—查找输出未装配代码的选项或用于分解二进制输出的工具。