tangofan 发表于 2007-6-27 15:02

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

因为采用引用返回方式的函数返回的是实际的单元,所以必须保证该单元在函数返回后依然存在。<BR>  函数:int&amp; f(){<BR>             int i;<BR>             ......<BR>             return i;<BR>             }<BR>包含了一个错误,当返回i时,i已经不存在了,因此,函数调用者不能访问这个返回的i。<BR>  改为: int f(){int i;..... return i;}<BR><BR>可是书上又说:引用返回,返回值不拷贝到临时存储空间,甚至连return语句所用的那个存储单元对调用者而言都是可访问的。<BR><BR>这两段话根本就是相反的嘛!我听谁的啊?

wfpb 发表于 2007-6-27 15:14

<P>临时变量返回引用,由于临时变量在{}结束后就注销,所以不应该访问,所以返回临时变量的引用是错误的。<br>成员函数返回对象的引用或者其他:<br>class A<br>{<br>    int a;<br>public:<br>    A():a(0){}<br>    A&amp; operator++()<br>    {<br>        a++;<br>        return *this;    //返回对象本身的引用,对象在析构之前仍然有效。<br>    }<br>};</P>
[align=right][color=#000066][此贴子已经被作者于2007-6-27 15:15:23编辑过][/color][/align]

野比 发表于 2007-6-27 20:46

使用变量时应保证在其生命周期内进行...

tangofan 发表于 2007-6-27 22:18

<P>基本了解了,谢谢。</P>

aipb2007 发表于 2007-6-27 22:39

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

wfpb 发表于 2007-6-28 00:22

<P>[quote]记住一点,不能返回局部变量的引用,或者局部指针对象。[/quote]<BR>局部指针是可以返回的。。。<BR>int* fun()<BR>{<BR>    return new int(3);<BR>}</P>

aipb2007 发表于 2007-6-28 09:19

wfpb,我指的当然不是动态内存啦。<br>更正一点,是不要返回指向局部对象的指针。<br><br>int* fun(){<br>    int a = 1;<br>    int* pi = &amp;a;<br>    return pi;<br>}<br>这样类似的情况。<br>

xjw1987524 发表于 2008-4-25 00:07

应该吧我现在还是不太懂啊

中学者 发表于 2008-4-25 08:05

[quote][bo]以下是引用 [un]wfpb[/un] 在 2007-6-28 00:22 的发言:[/bo]

局部指针是可以返回的。。。int* fun(){    return new int(3);} [/quote]
这样也不安全...你必须随时提醒自己要在fun()外用指针接受返回值//

sunkaidong 发表于 2008-4-25 11:41

呵呵..还好了,只要用指针接受就好了..要是没接受内存就要泄露了...

页: [1]

编程论坛