对于函数局部变量返回值有关问题
对于函数局部变量返回值问题看书看到这,又有点迷糊,遇到引用的局部变量时候就有点迷糊:C/C++ codeconst st
对于函数局部变量返回值问题
看书看到这,又有点迷糊,遇到引用的局部变量时候就有点迷糊:
C/C++ codeconst string &manip(const string& s){ string ret=s; return res;}
这个是错误的例子
C/C++ codechar &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)//看到这个引用参数了没有呢?
[解决办法]参数是你传进去的!!这由你决定函数实参的变量在哪
[解决办法][解决办法]生命期不同,跟是否是引用没有关系
第一个例子
{
string ret=s;
return ret;
}
//ret生命期就是{}之内,出来就销毁了
第二个例子
str不是在{}内产生的变量,是传进来的参数,处理后返回;
函数并不影响其参数的生命期。
[解决办法]你的 str 和 ix 是引用,也就是说,实际上并不在 get_va 的栈中
return str[ix] 是返回到 str[ix] 的引用,也就是你原来传进来的那些对象的引用。
[解决办法]不能以引用的方式返回栈内的变量,栈内的变量在函数执行完后自动销毁,这时可以返回值