我写了以下代码。我将两个函数增加和constincrease作为输入,它将类引用作为输入。 constincrease将其视为常量,而增加更简单并允许对其进行修改。
我不明白为什么行无法编译
increase(fun());
//此行无法编译
..我知道临时对象是常量,因此上面的行可能会失败,因为增加需要非const引用。但是,如果我们看到另一行代码传递
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;
}