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

返回引用的有关问题!

2012-04-20 
返回引用的问题!!!#include iostreamusingnamespacestdclassbase{public:intabase(){cout baseco

返回引用的问题!!!
#include <iostream>
using   namespace   std;

class   base
{
public:
int   a;
base(){cout < < "base   constrctor!! " < <endl;};
base(const   base&   bs)
{
cout < < "copy   constrctor!! " < <endl;
};
~base(){cout < < "destrctor!! " < <endl;};
base&   operator=(base&   bs){cout < < "====!! " < <endl;return   bs;};
};

base   func(base   bs)
{
return   bs;
};
int   main(int   argc,   char*   argv[])
{
base   bs1;
base&   bs2=func(bs1);//这句如果改成base   bs2=func(bs1);
system( "pause ");
return   0;
}

如果base&   bs2=func(bs1);改为base   bs2=func(bs1),好像没有什么影响。
有个疑问:明明要求返回一个引用,为什么base   bs2=func(bs1)没有问题呢??

base&   bs2=func(bs1);到底有没有建立一个bs2的新对象??还是bs2紧紧是返回值的引用。

[解决办法]
谢谢楼上的,但是还是有割疑问, 为什么返回的是引用, 而又可以赋值给一个对象呢, 觉得返回引用就应该将其赋值给引用才对呀,base bs2=func(bs1);怎么能成立呢 ???

你要明白为什么要返回引用,它的目的是实现链式操作(比如 a=b=c=d)

如果不返回引用的时候,它就会产生幽灵内存(存储空间被析构掉了)

引用的返回值是对于赋值的对象是没有特殊要求的(不过得类型匹配)

热点排行