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

对于函数局部变量返回值有关问题

2012-03-23 
对于函数局部变量返回值问题看书看到这,又有点迷糊,遇到引用的局部变量时候就有点迷糊:C/C++ codeconst st

对于函数局部变量返回值问题
看书看到这,又有点迷糊,遇到引用的局部变量时候就有点迷糊:

C/C++ code
const string &manip(const string& s){     string ret=s;     return res;}

这个是错误的例子
C/C++ code
char &get_val(string &str,string::size_type ix){         return str[ix];}

这个是正确的例子
这是primer 里面例题代码,后面写到形参也算该函数的局部变量对吧,第二段代码中,str和ix在函数结束后不也被销毁了吗?为什么这里就能return str[ix] 呢?


[解决办法]
参数是引用参数
表明该值在其他可寻址的地方定义着,不在get_val的栈空间
[解决办法]
get_val(string &str,string::size_type ix)//看到这个引用参数了没有呢?

[解决办法]
参数是你传进去的!!这由你决定函数实参的变量在哪
[解决办法]
探讨
引用:
参数是引用参数
表明该值在其他可寻址的地方定义着,不在get_val的栈空间

但是如果string &str被销毁了,后面的代码怎么知道要去哪里找?函数实参的变量在哪啊?

[解决办法]
生命期不同,跟是否是引用没有关系

第一个例子 
{
string ret=s;
return ret;
}
//ret生命期就是{}之内,出来就销毁了

第二个例子
str不是在{}内产生的变量,是传进来的参数,处理后返回;
函数并不影响其参数的生命期。

[解决办法]
你的 str 和 ix 是引用,也就是说,实际上并不在 get_va 的栈中
return str[ix] 是返回到 str[ix] 的引用,也就是你原来传进来的那些对象的引用。
[解决办法]
不能以引用的方式返回栈内的变量,栈内的变量在函数执行完后自动销毁,这时可以返回值

热点排行