参照変数 (エイリアス自体のエイリアス) の参照を作成しても問題ありませんか?
はいの場合、そのアプリケーションは何ですか?
C++98 では、参照型への参照を形成することは違法でした。C++11 では、参照を折りたたむ新しい規則があります。これは、簡単に言えば、参照への参照は依然として単なる参照であることを意味します (ただし、左辺値と右辺値の参照には微妙な点があります)。次のコードを検討してください。
typedef int & ir;
int a;
ir & b = a;
C++98 では、 はir &
有効な型ではない (参照への参照の試行) ため、最後の行は不正です。C++11 では、参照は折りたたまir &
れ、 と同じint &
です。
参照は不変であり、一度初期化すると参照のターゲットを変更できないことに注意してください。上記のコードでは、b
は常に のエイリアスでありa
、別のエイリアスに変更することはできません。したがって、通常の参照ですでに実行できる以上のことを行うことができないため、二重の間接参照は必要ありません。
完全を期すために、参照の折りたたみルールは次のとおりです。は参照T
型ではないとします。次に、概念的には次のようになります。
(T&)& == T& (T&)&& == T& (T&&)& == T& (T&&)&& == T&&
参照への参照を作成することはできず、C++ には参照から参照への型がありません。
参照を使用して別の参照を初期化する場合、たとえば次のようになります。
int i = 1;
int &a = i;
int &b = a;
次に、実際に行ったことは、参照先をto にバインドすることです。は の名前である同じオブジェクトの名前であり、結果としてとまったく同じ効果があります。したがって、同じオブジェクト への 2 つの参照があります。a
b
a
i
int &b = a;
int &b = i;
i
同じ関数に 2 つの参照を含める理由をすぐには思いつきませんが、参照パラメーターを受け取る関数があり、これを参照パラメーターも受け取るf
別の関数に渡す場合、複数の参照を作成するのが一般的です。 g
. 次にf
、g
それぞれが同じオブジェクトへの参照を持ちます。