C++返回引用的问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 00:50:20
比如
int& ABC()
{
int n = 5;

return n;
}

这样返回值和n用一段内存 就不会调用拷贝了
那么函数结束的时候n被释放了 那还会得到正确的返回结果了吗?

函数返回整形的n,那么系统会建一个临时变量存储n
int ABC()
{
int n = 5;

return n;
}

这里不需要返回引用
如你写的,函数调用结束后,函数栈会被销毁,引用不到了

例子:
函数返回值(int Func1())时,要产生一个临时变量作为函数返回值的副本(保存该函数调用中要返回的值),而用引用返回值(int &Func2())时,不产生值的副本。故在用函数返回值定义一个引用(int &ia = Func1())时,该引用为临时变量的引用,由于临时变量作用域短暂,故该引用存在随时无效的危险。而用引用返回值时,由于不产生值的副本,故int &i = func2();在func2()的返回值是一个静态或者全局变量的情况下的调用是合法可行的,其直接用全局数据区中的变量来初始化引用y,当然如果Func2中的返回值是局部变量,那么当然是非法的。

不妨自己再分析一下下面的四种函数调用:
int Func1();
int &Func2();
int &i = Func2();
int &ia = Func1();
int ib = Func1();
int ic = Func2();

有些时候就是要返回拷贝,比如说你这种。你得到一个被释放了的内存的引用,有什么用啊?

不能返回临时变量的引用。