1

测试一:

    #include <iostream>
    void function(int &parameter);
    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 &parameter) // ???
    {
        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) 那么为什么 ¶meter 可以多次赋值(参数的),(测试一)但 &variableTwo(测试二)不能?

2)这是因为,(测试一)参数的内存地址分配给variableOne和variableTwo?或者,variableOne 的值是否被分配给参数,然后是 variableTwo ?

3)也许,每次调用函数时都会创建一个新的参数实例吗?

4

3 回答 3

4

当您function使用不同的参数调用时,您会在每次调用时创建对该参数的新引用。

&variableTwo = variableThree;

在这里,您尝试将 的值分配variableThree给 的地址 variableTwo,这是非法的(也没有任何意义)。

此外,引用在创建后不能重新安装。因此,即使以下内容也是非法的。

int &variableTwo = variableOne;
variableTwo = variableThree;

请注意,同样的规则也适用于函数。如果您尝试重新分配输入参数以引用其他整数,则代码将无法编译。

void function(int &parameter)
{
    int local = 42;

    parameter += 5;
    parameter = local; // error!
}
于 2013-01-08T14:23:16.777 回答
1

这行代码:&variableTwo = variableThree;不符合您的期望。&variableTwo是 variableTwo 的地址,而不是对它的引用。因此,您尝试将某些内容分配给地址,这当然不会以这种方式编译。

于 2013-01-08T14:17:45.447 回答
0

创建引用时,它必须绑定到某些东西,并且以后不能引用其他东西。

但是当一个函数参数通过引用传递时,好吧,这样想,每次调用函数时,都会为传入的变量创建一个不同的引用。

没有矛盾,对吧?

于 2013-01-08T14:23:54.523 回答