2012-04-24 9 views
1

以下のプログラムは(gccで)コンパイルしますが、それは必要ですか?私は、下に作成されたV1(1.0)が定数であると考えていたので、非constメソッドを呼び出すことはできませんでした。const構造体で非constメンバー関数を呼び出せるのはなぜですか?

class V{ 
    double v; 
public: 
    V(double v1){ v = v1;} 
    void clear(){ v = 0;} 
}; 

int main(){ 
    V(1.0).clear(); 
} 

は、関数に、この比較「ボイドF(INT & T){}」と呼ぶことができない「F(1)」、1は非constの値ができない定数であるため参照t。

+2

一時的な!=定数(あなたが発見した通り) – valdo

+0

ここでは定数構造とは何でしょうか? – leftaroundabout

+1

私は何が 'const'になる可能性があるか分かりません。キーワードはコード内のどこにも表示されません。また、メンバ初期化構文。 – chris

答えて

1

あなたはr値と混同しているようです。 1はl値ではないため、f(1)は不正です。 V(1.0)は定数ではなく、一時的です。

+0

すべての返信をありがとう。 – Ekalavya

+0

一時的な値がl値として表示されるべきではないと私は考えていました。 – Ekalavya

3

V(1.0)は、によってdouble v1を初期化するコンストラクタを呼び出します。だから一時的に文字通りのコピーを持っている。