我在书上看到:
通过传值返回,返回的结果是一个临时对象,因为它是临时的,自动被定为常量,是不可变的,也就是说临时对象的值是不可以改变的.
但下边的这个程序我发现临时对象的值是可以变化的.
我用的VC6.0,是编译器问题,还是书上说的有问题?
#include<iostream>
using namespace std;
class X
{
private:
int i;
public:
X(int ii=0);
void modify();
void display();
};
X::X(int ii)
{
i=ii;
}
void X::modify()
{
i++;
}
void X::display()
{
cout<<"i="<<i<<endl;
}
X f5()
{
return X();
}
const X f6()
{
return X();
}
void f7(X& x)
{
x.modify();
x.display();
}
int main()
{
f7(f5()); //即没有警告,也没有错误
return 0;
}