初期化の参照
参照型の変数が参照型の派生型参照型の派生型に変換できる型のオブジェクトである型のオブジェクトで初期化されます。次に例を示します。
// initializing_references.cpp
int iVar;
long lVar;
int main() {
long& LongRef1 = lVar; // No conversion required.
long& LongRef2 = iVar; // C2440
const long& LongRef3 = iVar; // OK
LongRef1 = 23L; // Change lVar through a reference.
LongRef2 = 11L; // Change iVar through a reference.
LongRef3 = 11L; // C3892
}
一時オブジェクトへの参照を初期化する唯一の方法は定数一時オブジェクトを初期化します。初期化同じ型の変数への参照のポイントは常に変換する ; これは他のオブジェクトを指すように変更することはできません。
構文と同じですが参照型の変数の初期化と参照型の変数への代入は意味が異なります。前の例ではiVar と初期化のような lVar の外観を変更できるようにさまざまな効果があります。初期化は参照型変数が指すオブジェクトを指定します ; 参照によって参照されるオブジェクトへの割り当て。
参照型の引数を関数に渡し関数から参照型の値を返すことが初期化されるため関数の仮引数は参照が正しく初期化されます。
参照型の変数は次の子だけを初期化せずに宣言することがあります :
宣言 (関数プロトタイプ)。次に例を示します。
int func( int& );
関数の戻り値の型の宣言。次に例を示します。
int& func( int& );
参照型のクラス メンバーの宣言。次に例を示します。
class c { public: int& i; };
明示的に extern として指定される変数の宣言。次に例を示します。
extern int& iVal;
参照型の変数が初期化されるとコンパイラはオブジェクトへの参照を作成するか参照ポイント一時的なオブジェクトを作成するかを選択するには次の図に示すようにグラフを使用します。
参照型を初期化するグラフの決定
volatile の型への参照 (volatile の 型名の 識別子 として 宣言されている同じ型の volatile のオブジェクトまたは volatile として宣言されていないオブジェクトを初期化できます。がその型の 定数 のオブジェクトで初期化できません。同様に 定数 の型への参照 ( 定数 の 型名の 識別子 として 宣言されているその型へまたは 定数 として宣言されていない) オブジェクトとの変換は何も同じ型の 定数 のオブジェクトとできます (初期化します。ただしその型の volatile のオブジェクトで初期化できません。
定数 または volatile のキーワードで修飾されていない参照が 定数 volatile として宣言されたオブジェクトでしか初期化できません。