网上找的笔试题 问
#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++系统有不同规定)