返回引用为什么下面可以输出: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;}
[解决办法]
[解决办法]
[解决办法]
返回局部对象的引用这种方式肯定是错误的,之所以你那里可以看到貌似正确的结果,这是编译器造成的,
[解决办法]
[解决办法]
GCC下对第一个程序也没报错,
是警告:
warning: reference to local variable 'a' returne
