次の点を考慮してください。
int someA = 1;
int someB = 2;
int &a = someA;
int &b = someB;
a = b; // what happens here?
ここで参照で何が起こっていますか?ちょっと興味があるんだけど。
次の点を考慮してください。
int someA = 1;
int someB = 2;
int &a = someA;
int &b = someB;
a = b; // what happens here?
ここで参照で何が起こっていますか?ちょっと興味があるんだけど。
2 つの参照変数が互いに等しいこと自体はエラーではありません。混乱するかもしれません。ただし、コードが行うことは、別の参照への参照を設定することではなく、_A
fromの値1
をに変更すること2
です_B
。
[初期化された場所] でのみ参照を設定できます。初期化されると、元の変数のエイリアスになります。
あなたはこれを行うことができます:
int &a = _A;
int &b = _A;
と
a = b;
はすでに値を持っている に値1
を格納します。_A
1
関数の外にステートメントを持つことはできません。
a = b; //compile error?
これはステートメントなので、関数内にある必要があります。
int _A = 1;
int _B = 2;
int &a = _A;
int &b = _B;
int main()
{
a = b; //compile error? No. Now it compiles.
// As 'a' and 'b' are references.
// This means they are just another name for an already existing variable
// ie they are alias
//
// It means that it is equivalent to using the original values.
//
// Thus it is equivalent too:
_A = _B;
}
これでコンパイルされます。
ここにエラーはありませんが、あなたが混乱していることを知っているかもしれません。参照は再割り当てされませんが、参照している値は再割り当てされます。
したがって、参照はエイリアスであるため、a = b;
本質的にこれを言っていることになります。_A = _B
ポインタのように参照を再割り当てすることはできません。
参照が null になることもありません。