関数の参照によって何かを返さない場合、どのような状況でエラーが発生しますか?
3 に答える
デフォルトのアクションは、値で返すことです。参照を返したい主なケースは、より大きなオブジェクトの「一部」を公開したい場合です。たとえば、ベクトルまたはマップ内の要素。重要なことは、参照されるオブジェクトは、呼び出し元の関数の存続期間を超えている必要があるということです。
問題は、いつ参照によって戻ることが安全ではないかということです。参照によってメソッドにローカルな変数を返すときはいつでも、未定義の動作を呼び出しています。
コピーコンストラクターを正しく実装していない場合、値で返すのは安全ではありません。
コピーコンストラクターがプライベートとして宣言されていて、値で返そうとすると、エラーが発生します。
関数の参照によって何かを返さない場合、どのような状況でエラーが発生しますか?
正確に尋ねられているものに答えを制限します
。関数の戻り値をl値として機能させたい場合、および参照によって返さない場合は常に、エラーが生成されます。
このより一般的な例は、operator []
(配列サブスクリプション演算子)のオーバーロードです。lhsでonを使用するには、参照によって戻る必要があります[]
。l-valueとして使用するには、より正確になります。
例:
class Myclass
{
int i;
public:
/*Not returned by reference- gives error*/
int operator[](int idx){ return i;}
/*Returned by reference- gives no error*/
//int& operator[](int idx){ return i;}
};
int main()
{
Myclass obj;
obj[1]= 10;
return 0;
}
出力:
prog.cpp:関数内'int main()':
prog.cpp:16:エラー:代入の左オペランドとして左辺値が必要です