C++_引用类型

引用(reference)有时候也称作别名(alias),它可以用作对象的另一个名字。通过引用我们可以间接地操纵对象,使用方式类似于指针,但是不需要指针的语法。 

在实际程序中,引用主要被用作函数的形式参数--通常将类对象传递给一个函数。 

引用必须被初始化。 

  • 语法:
int ival = 1024;
// ok: refVal 是一个指向ival的引用
int &refVal = ival;

  • 引用除了可以引用变量,也可以引用指针:
int ival = 1024;

int *pi = &ival;
int *&ptrVal = pi;

  • 一旦引用被定义,它就不能再指向其他的对象了。所以引用必须被初始化。 针对于引用的操作实际上全部应用在了它所指的对象身上了
int ival = 1024;
// ok: refVal 是一个指向ival的引用
int &refVal = ival;

refVal += 2; //将refVal指向的对象ival加2
int ii = refVal; //把与ival相关联的值赋给ii
int *pi = &refVal; //用ival的地址初始化pi

  • 用常量来初始化引用时,必须使用const引用:
double dval = 3.14159;

// 仅对于const引用才是合法的
const int &ir = 1024;
const int &ir2 = dval;
const double &dr = dval + 1.0;

===============================================

指针和引用的区别:

===============================================

1. 引用必须总是指向一个对象。

int *pi = 0; //用初始化pi——即,pi 当前不指向任何对象
//但是下面定义的引用
const int &ri = 0; 

//在内部发生了以下转换
int temp = 0;
const int &ri = temp; //ri指向的是一个包含数值0的临时变量

2. 引用的赋值不同。如果用一个引用给另一个引用赋值,那么改变的是被引用的对象而不是引用本身。

  • 指针:
int ival = 1024, ival2 = 2048;
int *pi = &ival, *pi2 = &ival2;
pi = pi2;
//pi 指向的对象ival 并没有被改变。实际上pi被赋值为指向pi2所指的对象

   重要的是现在pi和pi2都指向同一对象。(这是一个重要的错误源,如果我们把一个类对象拷贝给另一个类对象,而该类有一个或多个成员是指针。 后面会有更详细的讨论)。

  • 引用:
int ival = 1024, ival2 = 2048;
int &ri = ival, &ri2 = ival2;
ri = ri2;
//改变的是ival,而不是引用本身。赋值之后,两个引用仍然指向原来的对象

================================================

引用的实际使用

================================================

实际的C++程序很少使用上面程序中指向独立对象的引用类型。引用类型主要被用作函数的形式参数。

如下:

// 返回访问状态,将值放入参数
bool get_next_value( int &next_value );

int ival;
while ( get_next_value( ival )) ...

//以上的实参跟形参的绑定,实际上等价于以下语句
int &next_value = ival;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值