引用返回
#include <iostream>
using namespace std;
int& fun(void)
{
int str = 7;
//int *p = &str;
return str;
}
int main()
{
int i = fun();
cout << i <<endl;
return 0;
};
求教,为什么我在vs2010能够运行?不是说不能引用返回局部变量吗?
[解决办法]
不要返回局部变量的引用和指针,因为函数返回之后,局部变量销毁。
返回的引用和指针已经无效。
是“不要”,不是“不能”,可以返回,但是它已经无效了。
[解决办法]
那证明vs2010不够严格,这样做很危险的,GUN之g++就不允许。
如果真心要返回变量引用,必须传入一个引用参数。
[解决办法]
具体代码:
//a.cpp
#include <iostream>
using namespace std;
int& fun(int& i)
{
return ++i;
}
int main()
{
int i = 2;
fun(i);
cout << i <<endl;
return 0;
}
[解决办法]
不要返回局部变量的引用和指针,因为函数返回之后,局部变量销毁。
你这里出现"正确"的结果有两个原因:
1.你是用int i来接收函数返回值,这样即使局部变量被销毁,也对i的值没有影响
2.局部变量在一个函数返回以后,其值随时都可能被以后函数栈帧中的数据所覆盖,而你这里只有一个函数所以没有覆盖的现象,main函数调用完了程序就结束了所以展现不了问题。
再运行下边的程序,是不是就会发现i的值为9了,非正确结果了?
#include <iostream>
using namespace std;
int& fun(void)
{
int str = 7;
return str;
}
int add(int a, int b){
int i = a + b;
return i;
}
int main()
{
int &i = fun();
add(4,5);
cout << i <<endl;
return 0;
};
[解决办法]
有两种情况可以返回引用。一种是普通函数,返回传入参数的引用;另一种是类方法函数,返回this对象的引用。
[解决办法]
返回引用好像一般都是在类里的成员函数里。