2013-05-10 7 views
5

私はC++のリファレンスコンセプトを実行していますが、このステートメントではC++完全リファレンスで少し混乱しています。C++でのリファレンスへの参照

あなたは別の参照に

を参照することはできませんので、どのようなこのケースで起こっている:

int var = 10; 
    int& ref = var; 
    int& r_ref = ref; 
    r_ref++; 
    cout << "var:" << var << "ref:" << ref << "r_ref:" << r_ref << endl; 

私は取得しています出力は次のようになります。

var:11 ref:11 r_ref:11 
+3

あなたが書いたコードは参照先の別の参照(例: 'int &&')ではありません。変数を2回参照しています。だから、コードはOKです。 – deepmax

答えて

10

それは少し紛らわしい言葉を選んだのです。つまり、int& &タイプ(int&&などがありますが、それは別のタイプの参照です)を持つことはできません。

コードでは、参照refは、varというオブジェクトを参照しています。名前refvarは同じオブジェクトを指すために同じ意味で使用できます。したがって、int& r_ref = ref;を実行すると、参照への参照は行われませんが、同じオブジェクトへの参照がもう一度行われます。

+0

参照への参照がint&&thenのokとみなされる場合。 – Daemon

+0

もう1つ**参照変数のアドレスを取得できません**。しかしここのrefはvarを参照するので、私は&refを出力することができます。あなたはこれを説明してください。 – Daemon

+1

@Guaravはい、 '&ref'を実行すると、実際に参照するオブジェクトのアドレスを取得しています。参照自体のアドレスは取得できません。実際には、参照自体がメモリ内に存在するかどうかは不明です。 –

6

それでは、このケースで起こっている:

何が起こっていることは、あなたがvarあるrefによって参照されるオブジェクトへの別の参照をr_ref作成しているということです。だから、varへの2つの参照で終わる:refr_ref

参照がちょうど別名であることに留意してください:、それはオブジェクトにバインドされた後に(そしてそれは初期化時にいくつかのオブジェクトにバインドする必要があり、それが後に再バインドすることはできません)参照上で行うすべての操作は、参照先のオブジェクトのとなっているかのように、 の参照が単なる別名であるかのように行われます。

この文はどういう意味:

あなたは別の参照を参照することはできません

は、あなたがさらにエイリアスすることができ実体としての基準自体を扱うことができないということです:参照がオブジェクトの別名です参照上の作業(参照境界を含む)は、参照されているオブジェクトに対して行われます。

0

int var = 10;は、varを宣言します。今あなたが書くときint& ref = var;varへの参照を定義します。 varの別名としてrefを見ることができます。どこでもrefを使用すると、varを直接使用するようなものです。

int& r_ref = ref;varへの別の参照を定義している理由です。