卧龙小说网> 奇幻玄幻> 普通的冒险故事> 2.3.1 引用

2.3.1 引用

2.3.1 引用

2.3.1 引用

Note:C++11中新增了一种引用:所谓的“右值引用(rvalue reference)”,我们将在13.6.1节(第471页)做更详细的介绍。这种引用主要用于内置类。严格来说,当我们使用术语“引用(reference)”时,指的其实是“左值引用(lvalue reference)”。

引用(reference)为对象起了另外一个名字,引用类型引用(refers to)另外一种类型。通过将声明符写成&d的形式来定义引用类型,其中d是声明的变量名:

int ival = 1024;

int &refVal = ival; // refVal指向ival(是ival的另一个名字)

int &refVal2; // 报错:引用必须被初始化

一般在初始化变量时,初始化会拷贝到新建的对象中。然而定义引用时,程序把引用和它的初始值绑定(bind)在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,因此引用必须初始化。

引用即别名

Note:引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字。

定义了一个引用之后,对其进行的所有操作都是在与之绑定的对象上进行的:

refVal = 2; // 把2赋给refVal指向的对象,此处即是赋给了ival

int ii = refVal; // 与ii = ival执行结果一样

为引用赋值,实际上是把值赋给了与引用绑定的对象。获取引用的值,实际上是获取了与引用绑定的对象的值。同理,以引用作为初始值,实际上是以与引用绑定的对象作为初始值:

// 正确:refVal3绑定到了那个与refVal绑定的对象上,这里就是绑定到ival上

int &refVal3 = refVal;

// 利用与refVal绑定的对象的值初始化变量i

int i = refVal; // 正确:i被初始化为ival的值

因为引用本身不是一个对象,所以不能定义引用的引用。

引用的定义

允许在一条语句中定义多个引用,其中每个引用标识符都必须以符号&开头:

int i = 1024 i2 = 2048; // i和i2都是int

int &r = i r2 = i2; // r是一个引用,与i绑定在一起,r2是int

int i3 = 1024 &ri = i3; // i3是int,ri是一个引用,与i3绑定在一起

int &r3 = i3 &r4 = i2; // r3和r4都是引用

除了2.4.1节(第55页)和15.2.3节(第534页)将要介绍的两种例外情况,其他所有引用的类型都要和与之绑定的对象严格匹配。而且,引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起,相关原因将在2.4.1节详述:

int &refVal4 = 10; // 错误:引用类型的初始值必须是一个对象

double dval = 3.14;

int refVal5 = dval; // 错误:此处引用类型的初始值必须是int型对象


普通的冒险故事提示您:看后求收藏(卧龙小说网http://www.wolongxs.com),接着再看更方便。

好书推荐:《我的剧本世界在自主运行》《我是舰娘》《交错世界之学院都市》《认清现实后,她们开始追夫火葬场》《好徒儿你就饶了为师伐》《剑来》《带着修真界仙子们天下无敌》《修炼成仙的我只想养成女徒弟》《足控勇者的目标是魔王的丝袜》《被触手怪养大的少女》

目录 加书签