带参考参数的子功能:它是如何工作的?

时间:2015-11-10 07:56:03

标签: c++

我最初展示了一个程序,它有一个非参考参数的子函数,如下所示:

#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 &mfunction inc(int &x)的作品如:n进入和出去。 2)如果有int &m为什么每个人总是说“inc (int &x)更快inc(int x)”?

我对此的理解是否正确?如果没有,你能告诉我为什么吗?

1 个答案:

答案 0 :(得分:3)

从编译器的角度来看,引用距指针不远。所以在

int inc(int &x)
{
    x++;
    return x;
}
...
inc(n);

您只将引用(变量n的地址)传递给函数,并且实际上增加了被调用者变量。

而在

int inc(int x)
{
    x++;
    return x;
}
...
inc(n);

您按值传递,并且您正在修改本地副本。