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

关于函数返回函数内变量的有关问题

2012-05-13 
关于函数返回函数内变量的问题例如:string GetString(void){string str Hellowreturn str}然后调用

关于函数返回函数内变量的问题
例如:string GetString(void)
{
string str = "Hellow";
return str;
}

然后调用这个函数:
string he = GetString();

he == "Hellow";

 这是什么原因,不是堆栈内的数据在函数返回的时候会销毁么?

[解决办法]
堆栈内的数据在函数返回时不会销毁,这个说法本来就是那些人乱说的,像C这样追求高运行效率的语言根本不敢去做这么多余的事情。

正确的说法是函数返回时局部变量将失效。失效的意思是说语言本身不再保证这些变量的内容的存在,同时也不能直接访问这些内容了。

而你的做法呢?你是把一个sting量str的值返回了。这是个传值操作,返回的是个值而不是局部变量本身。而后返回值被赋给了string变量he,也就是说he的值成为了GetString中str的值。整个过程里你都没有利用过已经失效的任何信息,而是完全符合标准的在使用各个变量。所以,最后得到的结果毋庸置疑。

真正不可依靠的,是返回一个指向局部变量的指针。这样的指针值会被返回,但它所指的内容已经失效了。
[解决办法]
char *GetString(void)
{
char *str = "Hellow";//这个字符串本身存储在全局空间,所以也是正确的。
return str;
}
而这样才可能出错:
char *GetString(void)
{
char str[] = "Hellow";//字符串的内容在栈上。
return str;
}
[解决办法]
其值挎贝到(返回值优化--则是直接构建)返回值中

热点排行