引用变量注意事项——第八章(P226)

引用变量注意事项——第八章(P226)

 

(1)引用变量必须在声明时就初始化。

例如:

int a;                                  int a;                                      

int &b;                               int & b=a;  (正确)

b=a;       (错误)

(2)引用作为函数参数。

a.引用最主要的作用就是作为函数参数使用,引用传递给函数的参数是实参的一个别名。是会影响实参的值的。

b.当调用一个有const引用的形参的函数时,如果实参不是一个变量(或者说实参没有一个确定的地址)或者类型不匹配时,那么函数会创建一个无名的临时变量用来存储实参的值,并把这个形参作为该临时变量的引用。这种转换只有在如下两种情况下才会发生:

   第一:实参类型与形参匹配,但是不是左值(比如:字面常量12、多项表达式a+9……);

   第二:实参类型与形参不匹配,但是可以转换成正确的类型。

例如:

#include<iostream>
using namespace std;

double refcube(const double & ra);
void main()
{
 double side1=12.0;
 int side2=6;
 double c5=refcube(side2);//实参类型与形参不匹配,但是可以转换成正确的类型
 cout<<c5<<endl;
 double c6=refcube(7.0);//实参类型与形参匹配,但是不是左值
 cout<<c6<<endl;
 double c7=refcube(side1+10.0);//实参类型与形参匹配,但是不是左值
 cout<<c7<<endl;
 double c8=refcube(side2+4);//实参类型与形参不匹配,但是可以转换成正确的类型,而且不是左值
 cout<<c8<<endl;
}
double refcube(const double & ra)
{ return ra*ra*ra;}

这段程序是能正确运行的。

注意:这种生成临时变量必须是要以const引用为前提的。如果函数为double refcube(double & ra);则该段程序将无法运行。

(3)引用作为函数返回类型:

如果函数的返回的类型为引用,则相当于函数返回函数体里return后变量的引用。

注意:如果函数的返回类型为引用,则必须返回一个在函数返回后不会销毁的变量:

例如:

#include<iostream>
using namespace std;

struct rect
{
  double x;
  double y;
};

struct rect & refcube(const struct rect & ra);

void main()
{
  struct rect side={3.0,4.0};
  struct rect c=refcube(side);
  cout<<c.x<<endl<<c.y<<endl;
}
struct rect & refcube(const struct rect & ra)
{
 struct rect temp;
 temp.x=ra.x*2;
 temp.y=ra.y*2;
 return temp;         返回temp的引用,但是,当函数调用完毕时temp已经销毁。所以,不能运行。
}

此程序是不能运行的。

所以,可以返回一个作为作为参数传递给函数的引用。或者是返回一个用new来分配的变量。
注意:如果函数的返回类型也为const引用,并不表示被引用的变量是const,而只是意味着您不能使用返回的引用来直接修改它指向的变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值