电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> C++/VC>>对前面对于引用的c++入门教程的补充说明之四:

对前面对于引用的c++入门教程的补充说明之四

来源:远方网络 | 2006-1-6 | (有2094人读过)

最后的一种情况是函数返回引用,并且发值赋给一个引用的情况!




//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include <iostream>
#include <string>
using namespace std;

float c;
float& test(float,float);
void main(int argc,char* argv[])
{
float &pn=test(3.0f,1.2f);
cout<<pn;
cin.get();
}

float &test(float a,float b)
{
c=a*b;
return c;
}



这种情况同样也不产生临时变量,可读和性能都很好,但有一点容易弄错,就是当c是某个函数的局部变量或者是在堆内存中临时开辟后来又被fee掉了以后的区域,这种情况和返回的指针是局部指针的后果一样严重,会导致引用指向了一个不明确的地址,这种情况在内存中情况见下图!




由于这种情况存在作用域的问题,故我们推荐采用第三种方式处理!

接下来我们说一个利用引用作为左值参与计算的例子,这一点一非常重要,对于理解返回引用的函数是非常有帮助的!





//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include <iostream>
#include <string>
using namespace std;

float c;
float& test(float,float);
void main(int argc,char* argv[])
{
float &pn=test(3.0f,1.2f);
cout<<pn<<endl;
test(3.0f,1.2f)=12.1;//把函数作左值进行计算!
cout<<pn;
cin.get();
}

float &test(float a,float b)
{
c=a*b;
return c;
}



通常来说函数是不能作为左值,因为引用可以做为左值,所以返回引用的函数自然也就可以作为左值来计算了.

在上面的代码中

float &pn=test(3.0f,1.2f);

进行到这里的时候pn已经指向到了目标c的地址了.

接下来运行了

test(3.0f,1.2f)=12.1;

把函数作左值进行计算,这里由于test是返回引用的函数,其实返回值返回的地址就是c的地址,自然c的值就被修改成了12.1
C++/VC热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号