3

为什么“Void”实际上返回“6”?

void Void (int &ref){
    ref++;
}

int main () {

    int test= 5;
    Void(test);
    cout << test;  // is 6      

    return 0;
}

我不太明白这里发生了什么。使用 Void(test) 我没有通过测试的地址。为什么不是“Void(&test);”?为什么 ref++ 将 1 添加到值 5?不应该是“*ref++”吗?

4

5 回答 5

5
int &ref = test;

ref被初始化为对变量的引用test。引用本质上是另一个对象的别名。尽管有熟悉的语法(即 amersand &),但这并没有获取任何东西的地址,并且在语义上与指针无关。

于 2013-04-20T21:46:06.817 回答
3
void Void (int &ref)
               ^
             this!

通过引用传递它

于 2013-04-20T21:37:51.933 回答
2

的参数Void具有类型int&&inint&是类型的一部分。它使它成为一个引用类型。&它与您可能用来获取对象地址的无关。

由于参数类型是引用类型,因此传递给它的任何对象都是通过引用传递的。这意味着ref函数内部指的test是它外部的对象。因此,ref++对 有影响test

这与类型中没有 a&并且它是按值传递的情况相反。这会将对象复制到函数中,并且ref++只会影响副本。

于 2013-04-20T21:38:45.527 回答
1
void Void (int &ref){
   ref++;
}

您通过 传递参数,因此对内部参数的reference任何更改都将直接应用于调用变量,即在这种情况下,因为是对refVoidtestreftest

于 2013-04-20T21:38:53.387 回答
0

你通过引用传递它。在 C++ 中通过引用传递变量时,不需要在参数前加上 &。如果函数的参数是引用,则在函数调用时通过引用传递参数。

于 2013-04-20T21:39:57.023 回答