注册 登录
编程论坛 C++教室

[求助]传值返回和引用返回?晕!

tangofan 发布于 2007-06-27 15:02, 958 次点击
因为采用引用返回方式的函数返回的是实际的单元,所以必须保证该单元在函数返回后依然存在。
函数:int& f(){
int i;
......
return i;
}
包含了一个错误,当返回i时,i已经不存在了,因此,函数调用者不能访问这个返回的i。
改为: int f(){int i;..... return i;}

可是书上又说:引用返回,返回值不拷贝到临时存储空间,甚至连return语句所用的那个存储单元对调用者而言都是可访问的。

这两段话根本就是相反的嘛!我听谁的啊?
9 回复
#2
wfpb2007-06-27 15:14

临时变量返回引用,由于临时变量在{}结束后就注销,所以不应该访问,所以返回临时变量的引用是错误的。
成员函数返回对象的引用或者其他:
class A
{
int a;
public:
A():a(0){}
A& operator++()
{
a++;
return *this; //返回对象本身的引用,对象在析构之前仍然有效。
}
};

[此贴子已经被作者于2007-6-27 15:15:23编辑过]

#3
野比2007-06-27 20:46
使用变量时应保证在其生命周期内进行...
#4
tangofan2007-06-27 22:18

基本了解了,谢谢。

#5
aipb20072007-06-27 22:39
记住一点,不能返回局部变量的引用,或者局部指针对象。
#6
wfpb2007-06-28 00:22

记住一点,不能返回局部变量的引用,或者局部指针对象。

局部指针是可以返回的。。。
int* fun()
{
return new int(3);
}

#7
aipb20072007-06-28 09:19
wfpb,我指的当然不是动态内存啦。
更正一点,是不要返回指向局部对象的指针。

int* fun(){
int a = 1;
int* pi = &a;
return pi;
}
这样类似的情况。
#8
xjw19875242008-04-25 00:07
应该吧我现在还是不太懂啊
#9
中学者2008-04-25 08:05
[bo]以下是引用 [un]wfpb[/un] 在 2007-6-28 00:22 的发言:[/bo]

局部指针是可以返回的。。。int* fun(){    return new int(3);}

这样也不安全...你必须随时提醒自己要在fun()外用指针接受返回值//
#10
sunkaidong2008-04-25 11:41
呵呵..还好了,只要用指针接受就好了..要是没接受内存就要泄露了...
1