为什么“Void”实际上会返回“6”?
void Void (int &ref){
ref++;
}
int main () {
int test= 5;
Void(test);
cout << test; // is 6
return 0;
}
我不太明白这里发生了什么。使用Void(测试)我没有通过测试的地址。 为什么不“Void(&amp; test);”? 为什么ref ++在值5中加1?不应该是“* ref ++”吗?
答案 0 :(得分:4)
int &ref = test;
ref
被初始化为对变量test
的引用。引用本质上是另一个对象的别名。尽管有熟悉的语法(即amersand &
),但不取任何地址,在语义上, nothing 做指针。
答案 1 :(得分:2)
void Void (int &ref)
^
this!
答案 2 :(得分:2)
Void
的参数类型为int&
。 &
中的int&
是该类型的一部分。它使它成为一种参考类型。它与您可能用于获取对象地址的&
无关。
由于参数类型是引用类型,传递给它的任何对象都是通过引用传递。这意味着函数内的ref
引用了它之外的test
对象。因此,ref++
会对test
产生影响。
这与您在类型中没有&
并且按值传递时相反。这会将对象复制到函数中,而ref++
只会影响副本。
答案 3 :(得分:1)
void Void (int &ref){
ref++;
}
您通过reference
传递了参数,因此ref
内参数Void
的任何更改都将直接应用于调用变量,即test
,因为{ {1}}是对ref
答案 4 :(得分:0)
您通过引用传递它。当您在C ++中通过引用传递变量时,您不需要具有&amp;在争论之前。如果函数的参数是引用,则在函数调用时通过引用传递参数。