网上找的笔试题 问

pjx_raul 2008-03-09 10:19:55
#include <iostream.h>
float temp; //定义全局变量temp
float fn1(float r); //声明函数fn1
float &fn2(float r); //声明函数fn2
float fn1(float r) //定义函数fn1,它以返回值的方法返回函数值
{
 temp=(float)(r*r*3.14);
 return temp;
}
float &fn2(float r) //定义函数fn2,它以引用方式返回函数值
{
 temp=(float)(r*r*3.14);
 return temp;
}
void main() //主函数
{
 float a=fn1(10.0); //第1种情况,系统生成要返回值的副本(即临时变量)
 float &b=fn1(10.0); //第2种情况,可能会出错(不同 C++系统有不同规定)
 //不能从被调函数中返回一个临时变量或局部变量的引用
 float c=fn2(10.0); //第3种情况,系统不生成返回值的副本
 //可以从被调函数中返回一个全局变量的引用
 float &d=fn2(10.0); //第4种情况,系统不生成返回值的副本
 //可以从被调函数中返回一个全局变量的引用
 cout<<a<<c<<d;
}

为什么fn1 时,会生成返回值的副本。。temp不是全局变量吗,一直存在的啊,不就应该不用生成副本了??
能不能对这4种情况解释下

...全文
144 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdn5211 2008-03-10
  • 打赏
  • 举报
回复
不是说了吗,可能会出错(不同 C++系统有不同规定)
IT_lau 2008-03-09
  • 打赏
  • 举报
回复
float &b=fn1(10.0); //第2种情况,可能会出错(不同 C++系统有不同规定)
 //不能从被调函数中返回一个临时变量或局部变量的引用
这里出错了,不能用&b,,返回值不对
IT_lau 2008-03-09
  • 打赏
  • 举报
回复
E:\MSDev98\MyProjects\csdn\file_3_hanshudiaoyong.cpp(20) : error C2440: 'initializing' : cannot convert from 'float' to 'float &'
我运行怎么, 出错了
pjx_raul 2008-03-09
  • 打赏
  • 举报
回复
谢谢指点
csdn5211 2008-03-09
  • 打赏
  • 举报
回复
是的,会复制一份return后面的东西。
pjx_raul 2008-03-09
  • 打赏
  • 举报
回复
是不是返回值是引用外,其余都要生成临时变量?
csdn5211 2008-03-09
  • 打赏
  • 举报
回复
fn1和fn2的区别就是返回值类型不同,fn2返回的是引用。
csdn5211 2008-03-09
  • 打赏
  • 举报
回复
因为用了return而返回值类型是float,此时编译器就会把return后面的temp复制一份,和temp是什么东西没有关系。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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