首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

Thinking in C++的一个例子(第二版 182页),该怎么解决

2012-02-12 
Thinking in C++的一个例子(第二版 182页)classX{intipublic:X(intii0)voidmodify()}X::X(intii){ii

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常量,不允许对其的值进行改变!

热点排行