1

以下のプログラムは (gcc で) コンパイルされますが、そうすべきでしょうか? 以下で作成された V1(1.0) は定数なので、const 以外のメソッドを呼び出すことができないと思っていました。

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

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

これを、「f(1)」として呼び出すことができない関数「void f(int &t){}」と比較してください。これは、1 が非 const 参照 t の値になることができない定数であるためです。

4

2 に答える 2

3

V(1.0)double v1 copyによって初期化されるコンストラクターを呼び出します。したがって、リテラルのコピーを含む一時的なものがあります。

于 2012-04-24T11:43:49.123 に答える
1

定数とr値を混同しているようです。はl値ではないf(1)ため、違法になります。定数ではなく、一時的なものです。1V(1.0)

于 2012-04-24T11:41:54.290 に答える