参照がオブジェクトに初期化されると、変更できないことを読みました。次のコードは機能するので、おそらく概念を誤解していますか? (または、不変の意味でこれを意味するのでしょうか?)
int main()
{
int x = 4;
int& j = x;
cout << j << endl;
int y = 5;
j = y;
cout << j << endl;
}
次のコードは機能するので、おそらく概念を誤解していますか?
確かに、あなたはその概念を誤解していると思います。表現:
j = y;
への参照になるように再バインドするのではなく、によって参照されるオブジェクトにの値を代入します。割り当て後にこれを試してください:j
y
y
j
cout << (&j == &x)
が出力されていることがわかります1
(つまりj
、 は依然として のエイリアスですx
)。
初期化後、参照はバインド先のオブジェクトのエイリアスになります。参照に対して行うことはすべて、参照されているオブジェクトに対して行います。
参照は再バインドまたはバインド解除できず、実際には、バインド先のオブジェクトの単なる代替名になります。
新しい「オブジェクト」(技術的にはオブジェクトではありません)にバインドするのではなく、参照に割り当てるだけです。印刷するx
と、それも変更されていることがわかります (omg) :)
伝えられていたのは、参照は再バインドできないということです。割り当てはx
ではなくに影響しj
ます。一方、変数は代入後もj
まだバインドされています。x
別のアドレスの別のオブジェクトを参照することはできませんが、このように、オブジェクト自体の値を変更することはできます。