1

テスト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;
    }

テスト2:

    #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)では、なぜ&parameterに(引数の)値を複数回割り当てることができるのに(テスト1)、&variableTwo(テスト2)を割り当てることができないのですか?

2)これは、(テスト1)パラメータのメモリアドレスが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 に答える