2

参照がオブジェクトに初期化されると、変更できないことを読みました。次のコードは機能するので、おそらく概念を誤解していますか? (または、不変の意味でこれを意味するのでしょうか?)

int main()
{

    int x = 4;
    int& j = x;
    cout << j << endl;
    int y = 5;
    j = y;
    cout << j << endl;
}
4

4 に答える 4

7

次のコードは機能するので、おそらく概念を誤解していますか?

確かに、あなたはその概念を誤解していると思います。表現:

j = y;

への参照になるように再バインドするのではなく、によって参照されるオブジェクトにの値を代入します。割り当て後にこれを試してください:jyyj

cout << (&j == &x)

が出力されていることがわかります1(つまりj、 は依然として のエイリアスですx)。

初期化後、参照はバインド先のオブジェクトのエイリアスになります。参照に対して行うことはすべて、参照されているオブジェクトに対して行います

参照は再バインドまたはバインド解除できず、実際には、バインド先のオブジェクトの単なる代替名になります。

于 2013-06-05T21:30:05.550 に答える
3

新しい「オブジェクト」(技術的にはオブジェクトではありません)にバインドするのではなく、参照に割り当てるだけです。印刷するxと、それも変更されていることがわかります (omg) :)

于 2013-06-05T21:30:07.860 に答える
3

伝えられていたのは、参照は再バインドできないということです。割り当てはxではなくに影響しjます。一方、変数は代入後もjまだバインドされています。x

于 2013-06-05T21:30:48.350 に答える
2

別のアドレスの別のオブジェクトを参照することはできませんが、このように、オブジェクト自体の値を変更することはできます。

于 2013-06-05T21:30:42.507 に答える