幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2718|回复: 5

[通用编程] 问个引用问题

[复制链接]

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
发表于 2008-3-30 14:11:23 | 显示全部楼层 |阅读模式
  1. #include<iostream>
  2. using namespace std;
  3. float temp;
  4. float fn1(float r)  //求圆面积
  5. {
  6.     temp=r*r*3.14;
  7.     return temp;
  8. }
  9. float &fn2(float r)
  10. {
  11.     temp=r*r*3.14;
  12.     return temp;
  13. }
  14. void main()
  15. {
  16.     float a=fn1(5.0);
  17.     float &b=fn1(5.0);
  18.    
  19.     cout<<a<<endl;
  20.     cout<<b<<endl;
  21.    
  22. }
  23. float &b=fn1(5.0);为什么这一句会报个类型不符的错误呢
复制代码
引用的类型不是这样用的吗

int  b=1;
int &a=b;
上面的那句不是跟这里一样吗?为什么会错呢?
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复

使用道具 举报

0

主题

2

帖子

24

积分

②入门

积分
24
QQ
发表于 2008-3-30 16:39:13 | 显示全部楼层
float &b=fn1(5.0);
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2008-4-1 17:26:38 | 显示全部楼层
這是什麼意思。。。。
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

23

主题

218

帖子

2470

积分

⑥精研

积分
2470
发表于 2008-4-2 02:49:39 | 显示全部楼层
引用只能引用实际的变量,不能引用立即数。

float a;
float &b=a;
这样a是实际的变量,所以没有问题,以后对b的操作实质上就是对a的操作。

float &b=sin(a);
这样sin(a)是个立即数,实际上“sin(a)”这个变量并不存在,sin(a)的值只在sin函数返回到赋给别的变量的瞬间存在(汇编上体现为:sin(a)的返回值保存在EAX,当赋给别的变量后,EAX就拿来作别的用途,sin(a)的返回值就不存在了)。那么如果b是对sin(a)的引用,那么对b的操作实质上是对什么的操作呢?对那个只是瞬间存在的返回值?对sin函数本身?这明显都不可能。因而对立即数的引用是没有意义的,像
float &b=sin(a);
float &c=4.0;
int &d=1+2;
都是不允许的,给引用“赋值”只能用实际存在的变量。

一般来说,引用是用来作函数的形参和返回值用的(事实上我还真的没见过别的用途),给函数传递引用可以避免类和结构的频繁复制和析构(这个其实跟用指针有什么不同?期待高人解答),也方便实现一些C++特性,例如运算符重载、范型编程等。
ONScripter for PSP/Windows中文版 http://blog.163.com/john_he_
回复 支持 反对

使用道具 举报

50

主题

742

帖子

402

积分

版主

自定义头衔

Rank: 7Rank: 7Rank: 7

积分
402
发表于 2008-4-4 22:20:11 | 显示全部楼层
嗯,简单来说就是别名……
比如一个人叫张明,因为排行第二,常叫张二;
那么这里别名叫做b的人是谁?是这个函数的返回值吗?

他想说:float &b=fn1(5.0); 大概你是想float &b=fn2(5.0);罢?
Style-C
回复 支持 反对

使用道具 举报

313

主题

1574

帖子

1万

积分

⑧专业

*永恒国度*

积分
14145
QQ
 楼主| 发表于 2008-4-7 10:29:18 | 显示全部楼层
是啊,那為什麼
float &b=fn2(5.0); 可以呢?
[img][/img] http://shop33698673.taobao.com被别人嫉妒,证明你优秀,嫉妒别人说明你无能
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2024-4-30 02:01 , Processed in 0.021746 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表