为什么可以在常量结构上调用非const成员函数?

时间:2012-04-24 11:39:16

标签: c++ const type-mismatch

下面的程序编译(使用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();
}

将此与函数进行比较" void f(int& t){}"不能被称为" f(1)",因为1是一个常数,它不能是非常量参考t的值。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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