下面的程序编译(使用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的值。
答案 0 :(得分:3)
V(1.0)
调用构造函数,该构造函数通过复制初始化double v1
。所以你有一个临时的文字副本。
答案 1 :(得分:1)
您似乎将常量与r值混淆。 f(1)
将是非法的,因为1
不是l值。 V(1.0)
不是常数,而是暂时的。