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 是一个常数,不能作为非常量引用 t 的值。

4

2 回答 2

3

V(1.0)调用构造函数,该构造函数double v1 由 copy初始化。所以你有一个临时的文字副本。

于 2012-04-24T11:43:49.123 回答
1

您似乎将常量与 r 值混淆了。f(1)将是非法的,因为1它不是左值。V(1.0)不是常数,而是暂时的。

于 2012-04-24T11:41:54.290 回答