关于C++中的引用有关问题请高手们指教,多谢

关于C++中的引用问题请高手们指教,谢谢!
我是新手,刚开始接触C++,现遇到引用方面的问题请高手们指教,谢谢!

#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;
}


int 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;
}

上面代码中我不明白的是函数fn2返回类型为float&类型的,可是为什么在main函数中定义变量c的类型不是float &型而是float,这样不是返回类型不匹配了吗?


------解决方案--------------------
fn2返回的是temp的引用,对然后对c进行赋值,这样做很正常
------解决方案--------------------
float &fn2(float r) //定义函数fn2,它以引用方式返回函数值
{
 temp=(float)(r*r*3.14);
 return temp;
}
float c = fn2(10.0); // 右值
fn2(10.0) = 10; //左值都可以,
------解决方案--------------------
引用注意
------解决方案--------------------
用返回值给C赋值了
------解决方案--------------------
引用的语义(对象的别名),这里的类型转换是没问题的。
注意,这里是初始化,不是赋值。不过对于赋值而言也一样没问题。
(话说,ISO C++中没有找到直接的规定——lvalue-to-rvalue conversion也没直接讨论reference type,只能当作推论了。)

------解决方案--------------------
引用米什么问题啊
你说 上面代码中我不明白的是函数fn2返回类型为float&类型的,可是为什么在main函数中定义变量c的类型不是float &型而是float,这样不是返回类型不匹配了吗?
两个都可以把