问个引用问题
#include<iostream>
using namespace std;
float temp;
float fn1(float r)//求圆面积
{
temp=r*r*3.14;
return temp;
}
float &fn2(float r)
{
temp=r*r*3.14;
return temp;
}
void main()
{
float a=fn1(5.0);
float &b=fn1(5.0);
cout<<a<<endl;
cout<<b<<endl;
}
float &b=fn1(5.0);为什么这一句会报个类型不符的错误呢
引用的类型不是这样用的吗
像
intb=1;
int &a=b;
上面的那句不是跟这里一样吗?为什么会错呢? float &b=fn1(5.0); 這是什麼意思。。。。 引用只能引用实际的变量,不能引用立即数。
float a;
float &b=a;
这样a是实际的变量,所以没有问题,以后对b的操作实质上就是对a的操作。
float &b=sin(a);
这样sin(a)是个立即数,实际上“sin(a)”这个变量并不存在,sin(a)的值只在sin函数返回到赋给别的变量的瞬间存在(汇编上体现为:sin(a)的返回值保存在EAX,当赋给别的变量后,EAX就拿来作别的用途,sin(a)的返回值就不存在了)。那么如果b是对sin(a)的引用,那么对b的操作实质上是对什么的操作呢?对那个只是瞬间存在的返回值?对sin函数本身?这明显都不可能。因而对立即数的引用是没有意义的,像
float &b=sin(a);
float &c=4.0;
int &d=1+2;
都是不允许的,给引用“赋值”只能用实际存在的变量。
一般来说,引用是用来作函数的形参和返回值用的(事实上我还真的没见过别的用途),给函数传递引用可以避免类和结构的频繁复制和析构(这个其实跟用指针有什么不同?期待高人解答),也方便实现一些C++特性,例如运算符重载、范型编程等。 嗯,简单来说就是别名……
比如一个人叫张明,因为排行第二,常叫张二;
那么这里别名叫做b的人是谁?是这个函数的返回值吗?
他想说:float &b=fn1(5.0); 大概你是想float &b=fn2(5.0);罢? 是啊,那為什麼
float &b=fn2(5.0); 可以呢?
页:
[1]