2012-01-26 8 views

答えて

3

逆に等価であり、それはない必要にelするためのものです参照を返します。次の例を考えてみましょう。

#include <iostream> 

struct A { 
    A& operator=(float f) { 
    std::cout << "hey: " << f << std::endl; 
    } 
}; 

struct BR { 
    A el(int j, int k) { 
    return A(); 
    } 
    float el(int i, int j, int k) { 
    return 4.2; 
    } 
}; 

int main() { 
    BR buf_right, block; 
    int i = 0, j = 0, k = 0; 
    buf_right.el(j, k) = block.el(i, j, k); 
    return 0; 
} 

これを実行すると、 stdoutに次

ちょっと:4.2

+0

値が普通の型、例えば 'int'の場合はどうなりますか?それを達成するためにまだ '='をオーバーロードすることができるのだろうか? – Hossein

+0

@Hossein:私の知る限りでは、それは実現できません。 'int&int :: operator =(...)'。したがって、実際には(変更可能な)参照が必要です。 – bitmask

6

elメソッドが参照渡しの場合に有効です。 https://isocpp.org/wiki/faq/references#returning-refsを参照してください。

+0

より正確には、* non-const *参照を返す場合。 – Nawaz

+0

@ Nawaz: 'operator ='はconstメンバー関数ではないと仮定します(これは非常に奇妙ですが、正当だと思います)。 –

+0

@Nawaz:そうです。実際には有効でないかもしれない多くの方法があります。つまり、 'block.el(i、j、k)'に暗黙的に変換可能な戻り型があることを明確にすることさえない'buf_right.el(j、k)'のreturn-typeがアクセス可能な代入演算子を持つ型に変換します。たぶん私は "This is valid if ..."の代わりに "This is valid ... if ..."と書くべきだったのでしょうか? – ruakh

6

buf_right.el(j, k)参照を返す場合....

同様方法[オペレータの動作、 a[2] =3が他の回答にa.operator[](2) = 3

関連する問題