讨论:C++中函数不能返回局部变量的引用,你是怎么理解的?
C++ Primer中 214页中说千万不要返回局部变量的引用,然后有下面的示例:
const string &mainp(const string &s)
{
string ret=s;
return ret
}
//这个函数在运行的时候会出错,因为它返回了局部变量的引用。
我有点不明白 return ret 分明是返回的局部变量嘛 怎么会是返回局部变量的引用呢?
书上说不能返回局部变量的应用是因为函数在执行完后,系统就释放了局部变量的存储空间。有一点不太明白:函数执行完不就是执行完return语句才叫做执行完吗?那么执行return语句的时候函数还没有执行完。那么局部变量也就没有被释放 那应该还是可以引用的吧。
要是我哪里理解错了的话,请看下面的例子:
#include<iostream>
using namespace std;
int &ref()
{
int ivar=1100; //局部变量
int &irvar=ivar;
return irvar; // 返回了局部变量的引用
}
int main(int argc,char *argv[])
{
cout<<ref();
}
我编译后是可以正确运行的。
请大家解惑:
const string &mainp(const string &s)
{
string ret=s;
return ret
}
//这个函数在运行的时候会出错,因为它返回了局部变量的引用。
我有点不明白 return ret 分明是返回的局部变量嘛 怎么会是返回局部变量的引用呢?
书上说不能返回局部变量的应用是因为函数在执行完后,系统就释放了局部变量的存储空间。有一点不太明白:函数执行完不就是执行完return语句才叫做执行完吗?那么执行return语句的时候函数还没有执行完。那么局部变量也就没有被释放 那应该还是可以引用的吧。
要是我哪里理解错了的话,请看下面的例子:
#include<iostream>
using namespace std;
int &ref()
{
int ivar=1100; //局部变量
int &irvar=ivar;
return irvar; // 返回了局部变量的引用
}
int main(int argc,char *argv[])
{
cout<<ref();
}
我编译后是可以正确运行的。
请大家解惑:
...全文
相关推荐
探讨:C++中函数返回引用的注意事项
本篇文章是对C++中函数返回引用的注意事项进行了详细的分析介绍,需要的朋友参考下
浅谈C++左值引用和右值引用
下面小编就为大家带来一篇浅谈C++左值引用和右值引用。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
C++ 让函数返回数组的方法
主要介绍了C++ 让函数返回数组的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
返回结构类型 返回结构引用的函数.
数据结构 C++ 详细注释 返回指针 返回结构类型的函数 返回结构引用的函数.
c++静态局部变量和静态函数示例
在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。但有的时候我们需要在两次调用之间对变量的值进行保存。通常的想法是定义一个全局变量来实现。但是这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。静态局部变量正好可以解决这个问题。静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。该变量在全局数据区内分配内存;静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化(这一点非常的重要);静态局部变量一般在声明处初始化


