对C++中返回对局部变量引用的理解

在程序设计中,我们会定义一些临时的变量,这些临时变量只有在使用到它的时候系统才会在栈里给它分配空间,当使用过后,系统会在栈里收回它所占用的空间,这样它就消失了。在下面的例子中,在num &test(num &p)函数中,定义了一个tmp结构体变量,而且在函数的结束,我也让他返回了对它的引用,按照上面的说法,就是函数执行完之后,临时变量就没有了,那么:

             q=test(t);
cout<<"q.m="<<q.m<<endl
<<"q.n="<<q.n<<endl;

这里的输出应该是有问题的,但是运行之后,只是出现了一个警告:

Yin_yong.cpp: 在函数‘num& test(num&)’中:
Yin_yong.cpp:34:6: 警告: 返回了对局部变量的‘tmp’的引用 [默认启用]


代码如下:

#include <iostream>


using namespace std;


struct num
{
int m;
int n;
};


 num &test(num &);   //声明一个函数,返回对其的引用


int main()
{
num t,q;
t.m=98;
t.n=100;

cout<<"t.m="<<t.m<<endl
<<"t.n="<<t.n<<endl;

q=test(t);

                                        //在这里大量的分配栈空间,进行清空操作

cout<<"q.m="<<q.m<<endl
<<"q.n="<<q.n<<endl;


return 0;
}


num &test(num &p)
{
num tmp;

tmp.m=500;
tmp.n=500;

return tmp;

}


运行输出结果:

chenyu@chenyu-virtual-machine:~/chenyu/c++/1-2$ ./test 
t.m=98
t.n=100
q.m=500
q.n=500

可以看出,这里没有出现问题。按照预定的目的输出结果,这又是为什么呢》?

在网上查了一下,这里tmp所占用的栈空间没有被销毁,它还在那里存在着,所以在这个程序里,它没有出现问题。


但是如果在程序中红的的部分前面大量的分配栈空间,那么输出的结果就不一定了.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值