程序查错——参数引用
#include <string.h>
using namespace std;
const float pi = 3.14f;
float f;
float f1(float r)
{
f = r*r*pi;
return f;
}
float& f2( float r)
{
f = r*r*pi;
return f;
}
int main()
{
float f1(float=5);
float& f2(float=5);
float a = f1();
float &b=f1();
float c = f2();
float &d=f2();
cout << d << f << endl;
return 0;
}
这里f1函数返回的是全局变量f的值,f2函数返回的是全局变量f的引用。
21、22行正确,声明函数f1、f2的默认参数;(设置默认参数时,声明和定义中只需要在其中一个里设置就行)
25行错误,变量b被赋值为f1()的返回值。但是这里的b被定义为float &,这是错误的。因为在f1()函数的末尾,return的是全局变量f,但并不是返回f本身,而是对f的值进行了一次拷贝,所以对于b来说,f1返回的值并不是f本身,而是一个拷贝的值,对b来说,该值是一个常量,所以需要用常量引用去接受。即const float &b = f1();
便不会报错。
26行,尽管f2返回的是引用,但是引用实际上只是一个别名而已,这里可以理解为正常的变量与变量之间的赋值。
27行返回的是全局变量f的引用,对d来说,f就是一个变量,因此用普通的引用去接收没啥毛病。此外,实际上这里又创建了一个引用去引用f的引用。