引用变量使用误区

来源:互联网 发布:mac版idown怎么用 编辑:程序博客网 时间:2024/05/29 02:32

前两天感觉对引用明白的差不多了,但是今天突然一想感觉又糊涂了,对于返回引用类型的函数的返回值到底可以返回什么类型,以及返回局部变量的引用后出现的问题,感觉很头痛,还好看到了下面的一个帖子,并亲自在vc上做了实验,终于把引用弄明白了。。。。。。。。。。。。。。。。。。。

不能返回局部变量的引用给一个引用变量。但是如果返回引用给一个相关的非引用变量的话是可以的。下面的例子可以说明这一点。

#include<iostream>
using namespace std;
int &ref()
{
int ivar=1100; //局部变量
int &irvar=ivar;
return irvar; // 返回了局部变量的引用
}

void test()
{
int a=b=c=d=e=f=g=h=0;
}

int main()
{
/*这里函数ref返回局部变量的引用,返回后立即把ivar的值重新赋给了变量i,在主函数中i//是有效的,所以能够得到正确的结果*/
int i=ref();
int &j=ref();  //而下面这句,函数ref返回一个引用给引用变量。所以j就是ivar的别名
test();        //此处调用函数test,则会覆盖已经被系统释放的ivar所占的内存空间。
                 // 如果注释掉这句会发现下面输出j仍然会得到正确的结果
cout<<i<<endl<<j<<endl;
}

我是在vc6.0中运行的 没注释掉test的时候 输出j得到的是一个很大的随机值 注释掉test后仍然能够得到1100;所以我觉得书上的那句话有必要改一改:可以返回局部变量的引用,但是千万不要反回局部变量的引用给一个引用变量。

原创粉丝点击