参照を初期化するために使用するオブジェクトは、参照と同じ型にする必要があります。 同じ型でなければ、参照型に型変換できる型でなければなりません。 型変換が必要なオブジェクトを使用して定数への参照を初期化する場合は、一時オブジェクトを作成します。 次の例では、型 float の一時オブジェクトを作成します。
int i; const float& f = i; // reference to a constant float
オブジェクトを使用して参照を初期化する場合、 その参照をそのオブジェクトにバインド します。
型変換が必要なオブジェクトを使用して、定数以外の参照を初期化しようとすると、エラーになります。
参照は初期化されると、別のオブジェクトを参照するように変更することはできません。次に例を示します。
int num1 = 10; int num2 = 20; int &RefOne = num1; // valid int &RefOne = num2; // error, two definitions of RefOne RefOne = num2; // assign num2 to num1 int &RefTwo; // error, uninitialized reference int &RefTwo = num2; // valid
参照の初期化は、参照への代入と同じではないことに注意してください。 初期化は、実際の参照に対する別名であるオブジェクトを使用して参照を初期化することによって 、実際の参照で動作します。 代入は、参照されるオブジェクトでの参照を通して動作します。
次の場合には、初期化指定子を使用せずに参照を宣言できます。
以下のものへの参照は使用できません。
型 T の参照 r が、型 U の式 e によって初期化されると想定します。
以下のステートメントが true であれば、参照 r は e に直接バインドされます。
ステートメントの前のリストが true であるように e を暗黙的に型に変換できる場 合、参照 r も e に直接バインドされます。
関連参照