Thinking in C++的一个例子(第二版 182页)
class X
{
int i;
public:
X(int ii=0);
void modify();
};
X::X(int ii)
{ i= ii;}
void X::modify()
{i++;}
X f5()
{
return X();
}
const X f6()
{
return X();
}
void f7(X& x)
{
x.modify();
}
int main()
{
f5()=X(1); //----------1
f5().modify(); //----------2
// f7(f5()); //----------3
// f6()=X(1); //----------4
// f6().modify(); //----------5
// f7(f6()); //----------6
}
问题:[1]
第一行中 的赋值语句 为什么编译可以通过? 书中不是说生成的临时对象都是const的吗? 而这里 应该是对这个临时对象进行赋值操作了,问什么可以编译通过啊?(第二行也是改变了临时对象的值)
问题:[2]
f5 与f6 两个函数有什么不同? f6的const 是修饰返回值的吧? 如果是的话,而书中又说返回临时对象时候是默认是const的,在这里f6 这个const有什么用处? 不是和f5一样了吗
------请高人指点,谢谢!
[解决办法]
你的代码是不是写的有点问题~~
X f5()
{
return X();
}
X是函数返回的类型那X()是什么???是返回X()函数???
[解决办法]
第一行中的赋值语句
因为f5返回的是X类型的,“=”默认是重载了的,所以能!成的临时对象的生存周期随f5的结束而释放了。f6返回的是const常量,不允许对其的值进行改变!