读书人

网上找的笔试题 问解决方法

发布时间: 2012-04-11 17:42:33 作者: rapoo

网上找的笔试题 问
#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种情况解释下



[解决办法]
因为用了return而返回值类型是float,此时编译器就会把return后面的temp复制一份,和temp是什么东西没有关系。
[解决办法]
fn1和fn2的区别就是返回值类型不同,fn2返回的是引用。
[解决办法]
是的,会复制一份return后面的东西。
[解决办法]
E:\MSDev98\MyProjects\csdn\file_3_hanshudiaoyong.cpp(20) : error C2440: 'initializing' : cannot convert from 'float' to 'float &'
我运行怎么, 出错了
[解决办法]
float &b=fn1(10.0); //第2种情况,可能会出错(不同 C++系统有不同规定)
 //不能从被调函数中返回一个临时变量或局部变量的引用
这里出错了,不能用&b,,返回值不对
[解决办法]
不是说了吗,可能会出错(不同 C++系统有不同规定)

读书人网 >C++

热点推荐