参考文献似乎不变。为什么不参数?

时间:2013-01-08 14:15:15

标签: c++ reference

测试一:

    #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)那么为什么&amp;参数可以多次赋值(参数),(测试一个)但是&amp; variableTwo(测试二)不能?

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

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

3 个答案:

答案 0 :(得分:4)

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

&variableTwo = variableThree;

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

此外,创建后无法重新引用引用。所以,即便是以下情况也是非法的。

int &variableTwo = variableOne;
variableTwo = variableThree;

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

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

    parameter += 5;
    parameter = local; // error!
}

答案 1 :(得分:1)

这行代码:&variableTwo = variableThree;没有达到预期效果。 &variableTwo是variableTwo的地址,而不是对它的引用。所以你试着给地址分配东西,这当然不会那样编译。

答案 2 :(得分:0)

创建引用时,必须绑定某些内容,以后不能引用其他内容。

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

没有矛盾,对吧?