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;

原文链接: https://www.cnblogs.com/JaneTang/archive/2010/02/11/1667610.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++_引用类型

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/8173

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月6日 下午6:52
下一篇 2023年2月6日 下午6:52

相关推荐