2012-04-30 26 views
0

関数の参照によって何かを返さないと、どのような状況でエラーが発生しますか?参照渡しと値渡し。 C++

+0

カスケード事業者。 – chris

+0

代入演算子http://www.parashift.com/c++-faq-lite/assignment-operators.html – EdChum

答えて

2

関数の参照によって何かを返さないと、どのような状況でエラーが発生しますか?正確に求められているものへの答えを制限


あなたは、関数の戻り値は、L値として行動したいときはいつでも、あなたはそれがエラーが発生します参照して戻りません。

operator [](配列サブスクリプション演算子)がオーバーロードされる一般的な例は、l.h.s以上で[]を正しく使用してl値として使用するには、参照渡しする必要があります。

An example

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: In function ‘int main()’:
prog.cpp:16: error: lvalue required as left operand of assignment

+0

My Vectorクラスには、オーバーロードされた添え字演算子がありました。 Vectorの要素に値を設定します。私が[0] = 1を試してみたのと同じように、[0](ex。3)の値を1と比較して1に値を返すので値を返さないので、3 = 1になりますセンス。ありがとうございました! – user990689

2

ご質問は、参照することで安全でない場合があります。変数に参照用のローカル変数を渡すと、未定義の動作が呼び出されます。

コピーコンストラクタを正しく実装していないと、値で返されることは安全ではありません。

コピーコンストラクタがプライベート宣言されていて、値を返そうとするとエラーが発生します。

+0

確かに。 「何がエラーを発生させるか」という事例は少なく、どんな状況で私が参考にして返さなければならないのかという事例は少ない。ポインタを使用する場所は、参照を使用できる場所です。 – Will

+0

Qは明快で簡潔ですが、これは質問される質問には答えません。答えは重要な点ですが、質問された内容とは全く関係ありません。 –

+0

@Alsは2番目の段落に答えません - "関数の参照によって何かを返さないと、どのような状況でエラーが発生しますか?" - c-ctorを実装していない。 –

2

デフォルトのアクションは値で返すことです。 が参照を返したい場合は、大きなオブジェクトの一部を公開する場合があります。 “部分”例えばベクトル内の要素または マップです。重要なことは、呼び出されるオブジェクトが呼び出す関数の寿命を超えて の寿命を持たなければならないことです。