2016-07-31 10 views
4

私はC++でオブジェクト参照を初期化する方法は?

MyClass& x; 
x = MyClass(a,b,c); 

を実行しようとしました。しかしC++は、xが最初に初期化されていないと思うので、私がそうさせません。

だから私は

MyClass& x = MyClass(a,b,c); 

を実行しようとしました。しかし、それと間違って何invalid initialization of non-const reference of type 'MyClass&' from an rvalue of type 'MyClass'

を言ってエラーを得ましたか?今は何もできません。初期化の問題を回避するにはどうすればよいですか?

答えて

6

参照は、既存のオブジェクトを参照する必要があります。だから、オブジェクトを参照する前にオブジェクトを最初に持つ必要があります。

MyClass y = MyClass(a,b,c); 
MyClass &x = y; 
9

constは例えば、左辺値式(メモリ位置を指し、本質的に式)で初期化されなければならない非する通常の参照

MyClass o{ a, b, c }; 
MyClass& r = o; 

参照はconstであり、またはそれは(&&で示す)右辺値参照である場合、初期化ではなく、このような関数呼び出しによって生成される一時的なように、右辺の式とすることができる場合:

MyClass const& rc = foo(); 
MyClass&& rr = foo(); 

これらの場合、ローカル参照の場合、一時的な有効期間は参照の範囲に拡張されます。

また、初期化子が派生クラスの一時的なものを生成すると、それはライフタイムが延長されたフル派生クラスオブジェクトです。つまり、参照用に指定されたクラスにスライスがありません。

より一般的に、参照は、互換性のある型を持つ限り、一時的なオブジェクトの任意の部分にバインドすることができ、これによって完全な一時オブジェクトの存続期間が延長されます。

関連する問題