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

引述返回

2013-01-19 
引用返回#include iostreamusing namespace std int& fun(void) { int str 7 //int *p &str retu

引用返回


#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对象的引用。
[解决办法]
返回引用好像一般都是在类里的成员函数里。

热点排行