august 发表于 2008-3-30 14:11:23

问个引用问题


#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;
上面的那句不是跟这里一样吗?为什么会错呢?

cbbnbnn 发表于 2008-3-30 16:39:13

float &b=fn1(5.0);

august 发表于 2008-4-1 17:26:38

這是什麼意思。。。。

john_he 发表于 2008-4-2 02:49:39

引用只能引用实际的变量,不能引用立即数。

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++特性,例如运算符重载、范型编程等。

lw 发表于 2008-4-4 22:20:11

嗯,简单来说就是别名……
比如一个人叫张明,因为排行第二,常叫张二;
那么这里别名叫做b的人是谁?是这个函数的返回值吗?

他想说:float &b=fn1(5.0); 大概你是想float &b=fn2(5.0);罢?

august 发表于 2008-4-7 10:29:18

是啊,那為什麼
float &b=fn2(5.0); 可以呢?
页: [1]
查看完整版本: 问个引用问题