1

私は演習として Complex クラスを実装しており、このファイルをガイドラインとして見ています。
このファイルのある時点で、オーバーロードされた奇妙な演算子を見つけました。

template<typename _Tp>
    inline complex<_Tp>
    operator+(const complex<_Tp>& __x, const _Tp& __y)
    {
        complex<_Tp> __r = __x;
        __r.real() += __y;
        return __r;
    }

__r.real()としてどのように使用できlvalueますか?の2つのオーバーロードされた定義とともに、クラスに実装しようとしましたreal()が、もちろん、多くのエラーが返されます。
誰かが私に欠けているものを教えてもらえますか?

これらは関数real()との定義ですimag():

template<typename _Tp>
    inline _Tp&
    complex<_Tp>::real() { return _M_real; }

template<typename _Tp>
    inline const _Tp&
    complex<_Tp>::real() const { return _M_real; }

template<typename _Tp>
    inline _Tp&
    complex<_Tp>::imag() { return _M_imag; }

template<typename _Tp>
    inline const _Tp&
    complex<_Tp>::imag() const { return _M_imag; }
4

3 に答える 3

3

そのメンバーreal()への参照を返しています。_M_real;参照は左辺値として使用できます。

あなたが同じことをできるようにするには、参照も返す必要があります。

于 2013-05-30T16:28:20.540 に答える
1

_Tp&実装が;を返すことに注意してください。つまり、への参照です_Tp。これにより、戻り値が左辺値になります。

于 2013-05-30T16:28:15.760 に答える