2013-03-31 3 views
6

メインコンパイルの最初の行はなぜコンパイルされるのですか? は、私が思う一時両方ともが、1つは、あなたが代入演算子を作成しない場合、コンパイラはあなたのための1つを作成しますL値として扱われ、..は一時的な値ですか、そうでないのですか?

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); 
} 

答えて

2

クラス型では、代入演算子はメンバ関数です。すなわちa = bは、a.operator=(b)の単なる砂糖です。また、一時的にメンバ関数を呼び出すこともできます。

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

+0

はい!私はこれが私が行方不明だった引数だと思う...演算子=は右辺値で呼び出すことができますが、 "代入"は右辺値で行うことはできません – mhk

0

他のされていません。つまり、2つの一時的なものを作成し、一方を他方に割り当てると、両方が破棄されます。

+0

私は質問との関連性は感じません! – Ajay

0

いいえ、2番目は一時的ではありません。一時的なものは、(ほとんど制限された)生涯を持ち、その生涯にわたって居住する貯蔵領域を持っているものです。

char()にはこれらのいずれもありません。そのため、そのような表現を割り当てることは禁じられています。割り当てが言語の観点から変更するものは明確ではありません。その後は2と等しいでしょう0

関連する問題