返回引用解决方案

返回引用为什么下面可以输出:C/C++ code#includecstdio#includevectorusing namespace stdint& Fun()

返回引用
为什么下面可以输出:

C/C++ code
 
#include <cstdio>
#include <vector>
using namespace std;

int& Fun();

int main()
{
    int a=Fun();
    printf("%d",a);
    printf("\n");

    return 0;
}

int& Fun()
{
    int a=2;

    return a;
}


这样不行:
C/C++ code
#include <cstdio>#include <vector>using namespace std;vector<char>& Fun();int main(){    vector<char> cvec;    cvec=Fun();    //cvec.swap(Fun());        for (vector<char>::iterator iter=cvec.begin();iter!=cvec.end();++iter)    {        printf("%d\t",*iter);    }    printf("\n");        return 0;}vector<char>& Fun(){    // used var    vector<char> cvec(5,1);        return cvec;}

谢谢!

[解决办法]
探讨

因为,出来混,迟早要还的。
你不能依赖于那些依赖于你的人品的代码。

[解决办法]
函数返回local变量,很多书上都有介绍,有些编译器直接会报错的.
你的程序一能运行,纯属偶然.因为结果是不可预见的
[解决办法]
要想返回就弄成全局的吧,static之类的
[解决办法]
两段代码都是错误的,因为都返回了对局部变量的引用。
但是第一段代码在VS2005上运行正常,只能说是MS的编译器的奇迹:它对简单类型的局部变量的处理与对类类型的局部变量的处理不同,函数返回以后并没有销毁简单类型的内部变量。
[解决办法]
有可能已经回收了内存,但是并没有修改里面的值;而对于vector,则直接回收并覆盖里面的内容。
[解决办法]
C/C++ code
#include <cstdio>#include <vector>using namespace std;int* Fun(){    int a=2;    return &a;}int main(){    int *a=Fun();    printf("%d",*a);    printf("\n");    return 0;}
[解决办法]
探讨

我的理解是返回type&amp;,编译器不会再声明一个临时变量,可以提高效率。
C/C++ code

int a=Fun();// 此过程只是将Fun的返回值进行一次拷贝,没有用到函数中的局部变量


返回一个对象:系统要生成一个对象的拷贝返回;
返回一个引用:系统直接返回当前对象;

[解决办法]
探讨
我的理解是返回type&amp;,编译器不会再声明一个临时变量,可以提高效率。

C/C++ code

int a=Fun();// 此过程只是将Fun的返回值进行一次拷贝,没有用到函数中的局部变量


返回一个对象:系统要生成一个对象的拷贝返回;
返回一个引用:系统直接返回当前对象;

[解决办法]
返回局部对象的引用这种方式肯定是错误的,之所以你那里可以看到貌似正确的结果,这是编译器造成的,
[解决办法]
探讨
引用:
引用:
我的理解是返回type&amp;; 编译器不会再声明一个临时变量,可以提高效率。
int a=Fun();// 此过程只是将Fun的返回值进行一次拷贝,没有用到函数中的局部变量

返回一个对象:系统要生成一个对象的拷贝返回;
返回一个引用:系统直接返回当前对象;

int a=Fun()……

[解决办法]
GCC下对第一个程序也没报错,
是警告:
warning: reference to local variable 'a' returne