关于引用问题!

lijdking 2003-05-04 07:55:23
#include<iostream>
using namespace std;
float temp;
float fn1(float r)
{
temp=r*r*3.14;
return temp;
}
float fn2(float r)
{
temp=r*r*3.14;
return temp;
}
void main()
{
float a=fn1(5.0); //1:
float y=fn1(5.0); //2:
float &b=y; //float &b=fn1(5.0); 为什么不行?
float c=fn2(5.0); //3:
float x=fn2(5.0); //4:
float &d=x; //float &d=fn2(5.0); 也不行啊?
cout<<a<<endl;
cout<<b<<endl;
cout<<c<<endl;
cout<<d<<endl;
return;
}

谁能说说
1:
2:
3:
4:
四种情况各变量在内存中的活动情况
何时创建又何时消失
...全文
34 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijdking 2003-06-20
  • 打赏
  • 举报
回复
既然如此
float &b=fn1(5.0);当然不可以,你试图对fn1函数返回的一个临时值进行引用??
我觉得对临时对象引用也是可以的,只是引用后临时对象立即销毁(当然引用b也变得无用了)也即执行到下一行临时对象与引用b都over掉了而已,不知道我说得对否?
AlexXin 2003-06-20
  • 打赏
  • 举报
回复
不是,而是临时变量被编译器默认为const类型,也就是不可修改,所以用const修饰可以通过编译,thinking in c++ 中对const有详细地描述。
devoted 2003-06-20
  • 打赏
  • 举报
回复
是不是const让引用的地址变成了常量,所以就可以了?
lijdking 2003-06-20
  • 打赏
  • 举报
回复
谢谢大家
但我想问 lifanxi(Byron)
float &b=fn1(5.0);当然不可以,你试图对fn1函数返回的一个临时值进行引用。
要编译通过可以改成const float &b = fn1(5.0)不过没意义,不懂加个const为什么可以
编译通过?

zhengguoshan 2003-05-05
  • 打赏
  • 举报
回复
其实书上面讲的很清楚,多看几遍就好了。
boy21cnthp 2003-05-05
  • 打赏
  • 举报
回复
C++的,过向天再说吧
mercury1231 2003-05-05
  • 打赏
  • 举报
回复
函数的返回值为什么是临时的呢
greening 2003-05-05
  • 打赏
  • 举报
回复
按值传递的函数返回值是一个拷贝而已,你无法对它进行引用。如果你的函数返回的是一个引用,你可以修改它,包括引用。但是这对于你的问题,这就无必要了。
秋叶君 2003-05-04
  • 打赏
  • 举报
回复
引用其实就是变量的别名,一个变量可以有n个引用,即n个别名。没什么大不了的,就像我们每个人或多或少的有n 个外号,不管外号多少,总归指的是一个人。
Crops 2003-05-04
  • 打赏
  • 举报
回复
引用和指针类似,它保存的是所赋变量的地址,
例如:
int a=9;
int &b=a;
cout<<a;
cout<<b;//结果是两个9
函数的返回值是临时的,不可以把它赋给引用变量,
lijdking 2003-05-04
  • 打赏
  • 举报
回复
是钱能书上的例子啊
但我看的是电子书

图看得不大清楚,所以不是很懂
lifanxi 2003-05-04
  • 打赏
  • 举报
回复
float &b=fn1(5.0);当然不可以,你试图对fn1函数返回的一个临时值进行引用。
要编译通过可以改成const float &b = fn1(5.0)不过没意义,因为您引用过后,这个临时变量也不在了。
  • 打赏
  • 举报
回复
呵呵,钱能书上的例子吧?:)
其实他讲的很清楚了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧