测试一:
#include <iostream>
void function(int ¶meter);
int main()
{
int variableOne = 0;
int variableTwo = 6;
function(variableOne);
std::cout << variableOne << std::endl;
function(variableTwo);
std::cout << variableTwo << std::endl;
return 0;
}
void function(int ¶meter) // ???
{
parameter += 5;
}
测试二:
#include <iostream>
int main()
{
int variableOne = 2;
int variableThree = 7;
int &variableTwo = variableOne;
std::cout << variableOne << std::endl;
&variableTwo = variableThree; // ERROR (wrong side of operand etc...)
std::cout << variableThree << std::endl;
return 0;
}
1)那么为什么&amp;参数可以多次赋值(参数),(测试一个)但是&amp; variableTwo(测试二)不能?
2)这是因为,(测试一个)参数的内存地址被分配给variableOne和variableTwo?或者,是否将variableOne的值分配给参数,然后将变量分配给变量?
3)也许,每次调用函数时都会创建一个新的参数实例吗?
答案 0 :(得分:4)
当您使用不同的参数调用function
时,您将在每次调用时创建对该参数的新引用。
&variableTwo = variableThree;
在这里,您尝试将variableThree
的值分配给 variableTwo
的地址,这是非法的(也没有意义)。
此外,创建后无法重新引用引用。所以,即便是以下情况也是非法的。
int &variableTwo = variableOne;
variableTwo = variableThree;
请注意,同样的规则也适用于该功能。如果您尝试重新分配输入参数以引用其他整数,则代码将无法编译。
void function(int ¶meter)
{
int local = 42;
parameter += 5;
parameter = local; // error!
}
答案 1 :(得分:1)
这行代码:&variableTwo = variableThree;
没有达到预期效果。 &variableTwo
是variableTwo的地址,而不是对它的引用。所以你试着给地址分配东西,这当然不会那样编译。
答案 2 :(得分:0)
创建引用时,必须绑定某些内容,以后不能引用其他内容。
但是当一个函数参数通过引用传递时,好吧,这样想,每次调用该函数时,都会为传入的变量创建一个不同的引用。
没有矛盾,对吧?