6

main の最初の行はコンパイルされるのに、2 行目はコンパイルされないのはなぜですか? どちらも一時的なものだと思いますが、1つは左辺値として扱われ、もう1つはそうではありません..

class complex
{
   public:
     complex() : r(0),i(0) {}
     complex(double r_, double i_) : r(r_), i(i_)
    {

    }

  private:
    double r;
    double i;
 };

int main()
{
   complex(2,2) = complex(1,2);
   char() = char(2);
}
4

3 に答える 3

2

クラス型では、代入演算子はメンバー関数です。つまり、a = bは の単なるシンタックス シュガーですa.operator=(b)。また、一時的にメンバー関数を呼び出すことはまったく問題ありません。

C++ では、左辺値という用語は代入の左辺とは何の関係もないことに注意してください。あなたの例が示すように、クラス型の右辺値に割り当てることはまったく問題ありません。また、配列や定数、特に文字列リテラルなど、代入できない左辺値もあります。

于 2013-03-31T18:13:37.790 に答える
0

代入演算子を作成しない場合は、コンパイラによって作成されます。これは、2 つの一時オブジェクトを作成し、一方を他方に割り当てると、両方とも破棄されることを意味します。

于 2013-03-31T18:01:09.447 に答える