我最初展示了一个程序,它有一个非参考参数的子函数,如下所示:
#include<iostream>
using namespace std;
int inc(int x)
{
x++;
return x;
}
main()
{
n=3;
inc(n);
cout<<n;
}
我认为关于子功能可能如下所示:
当我们致电inc(n)
时,之后可能是计算机会创建一个var int m;
并且:
m=n; m++;
最后它被删除了。
带有参考参数的子功能:
#include<iostream>
using namespace std;
int inc(int &x)
{
x++;
return x;
}
main()
{
n=3;
inc(n);
cout<<n;
}
我想:
当我们拨打inc(n)
时,之后可能是计算机会创建一个var int &m=n
;
m++; return m;
最后会被删除,但n
已被n+1
更改。
我为什么要问?有两个原因:
1)我的恶魔说:没有创作int &m
,function inc(int &x)
的作品如:n进入和出去。
2)如果有int &m
为什么每个人总是说“inc (int &x)
更快inc(int x)
”?
我对此的理解是否正确?如果没有,你能告诉我为什么吗?
答案 0 :(得分:3)
从编译器的角度来看,引用距指针不远。所以在
int inc(int &x)
{
x++;
return x;
}
...
inc(n);
您只将引用(变量n
的地址)传递给函数,并且实际上增加了被调用者变量。
而在
int inc(int x)
{
x++;
return x;
}
...
inc(n);
您按值传递,并且您正在修改本地副本。