我编写了以下代码。我写了两个函数 increase 和 constincrease ,它们将类引用作为输入。constincrease 将其视为常数,而 increase 更简单并允许对其进行修改。
我不明白为什么行无法编译
increase(fun());
// 这行编译失败
.. 我知道临时对象是常量,因此上面的行可能会失败,因为 increase 需要一个非常量引用。但是,如果我们看到还有另一行代码通过
increase(x3);
重点是为什么上面的行通过了,但其他东西无法正确编译。
class X{
public:
int i ;
};
X fun(){
return X();
}
void increase( X & p )
{
cout<< "\n non-const-increase called ";
p.i++;
}
void constincrease( const X & p )
{
cout<< "\n const-increase called ";
// this function p is const so p.i++; is wrong ...
}
int main(int argc, char *argv[])
{
X x3;
x3.i=9;
increase(x3); // this line passes compilation
constincrease(x3); // const-increase alwasy passes
increase(fun()); // this line fails to compile
constincrease(fun()); // const -increase passes
system("PAUSE");
return EXIT_SUCCESS;
}