千万不能返回局部变量的引用??
2013-10-29 20:43
274 查看
C++ Primer第7章函数一节,讲到返回时,“理解返回引用至关重要的是,千万不能返回局部变量的引用”,
意思是返回程序内部定义的变量时可能会出问题,因为当函数执行完毕后,将释放分配给局部对象的存储空间。
此时,对局部对象的引用就会指向不确定的内存。
觉得不能理解。
比如求阶乘时,可以使用迭代函数的方法,程序很简单,代码如下:
#include <iostream>
using namespace std;
long factorial(int n)
{
int i;
long result=1;
for(i=n;i>=1;--i)
result*=i;
return result;
}
int main()
{
int n;
long result;
cout<<"输入n值"<<endl;
cin>>n;
result=factorial(n);
cout<<n<<"的阶乘为"<<endl;
cout<<result<<endl;
return 0;
}
我在函数中定义的result必然是局部变量,但是作为结果,我必须将这个值返回,所以是不是我就违反了千万不能返回局部变量的引用呢,按照书上所说,rensult变量在函数执行完毕后空间就会被释放,那么这段程序就是错的。可是既然程序能运行出正确的结果,那就必然是正确的,真的很矛盾啊。
意思是返回程序内部定义的变量时可能会出问题,因为当函数执行完毕后,将释放分配给局部对象的存储空间。
此时,对局部对象的引用就会指向不确定的内存。
觉得不能理解。
比如求阶乘时,可以使用迭代函数的方法,程序很简单,代码如下:
#include <iostream>
using namespace std;
long factorial(int n)
{
int i;
long result=1;
for(i=n;i>=1;--i)
result*=i;
return result;
}
int main()
{
int n;
long result;
cout<<"输入n值"<<endl;
cin>>n;
result=factorial(n);
cout<<n<<"的阶乘为"<<endl;
cout<<result<<endl;
return 0;
}
我在函数中定义的result必然是局部变量,但是作为结果,我必须将这个值返回,所以是不是我就违反了千万不能返回局部变量的引用呢,按照书上所说,rensult变量在函数执行完毕后空间就会被释放,那么这段程序就是错的。可是既然程序能运行出正确的结果,那就必然是正确的,真的很矛盾啊。
相关文章推荐
- 不能返回局部变量的引用
- 不能返回局部变量的引用
- C#7.0之ref locals and returns (局部变量和引用返回,之前欠大家的,现在补上)
- 实战c++中的string系列--函数返回局部变量string(引用局部string,局部string的.c_str()函数)
- C#7.0之ref locals and returns (局部变量和引用返回,之前欠大家的,现在补上)
- C#7.0之ref locals and returns (局部变量和引用返回,之前欠大家的,现在补上)
- 条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引用 (转自effective c++ second edition)
- 写一个返回字符串长度的函数,函数里面不用局部变量,不能调用系统函数strlen
- 条款 31: 千万不要返回局部对象的引用,也不要返回函数内部用 new 初始化的 指针的引用
- pthread_exit ---- 不能使用局部变量作为参数返回
- C#7.0之ref locals and returns (局部变量和引用返回,之前欠大家的,现在补上)
- 引用与局部变量的返回问题
- C语言函数不能返回局部变量的地址
- 函数可以返回左值,不能返回局部对象的引用
- 为什么C++中千万不要返回局部对象或变量的引用和指针
- 不能返回局部对象的引用
- 提高C++代码质量 - [083]不要返回局部变量的引用
- 局部变量不能返回引用
- C语言函数不能返回局部变量的地址
- C++关于不能返回局部变量的指针的研究