(因为是学习笔记,所以很多地方直接从书上敲在电脑上,所以标记成为“转载”)
引用的再次学习
C++11中新增了一种引用:所谓的“右值引用(rvalue reference)”。这种引用主要用于内置类。严格来说,当我们使用术语“引用(reference)”时,指的其实是“左值引用(lvalue reference)”。
引用(reference)为对象起了另外一个名字,引用类型引用(refers to)另外一种类型。通过将声名符写成&d的形式来定义引用类型,其中d是声明的变量名:
int ival=1024;
int &refVal=ival;//refVal指向ival(是ival的另一个名字)
int&refVal2;//报错:引用必须被初始化
一般在初始化变量时,初始值会被拷贝到新建的对象中。然而定义引用时,程序吧引用和它的初始值绑定(bind)在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和它的初始值对象一直绑定在一起。因为无法令引用重新绑定到另一个对象,因此引用必须初始化。
引用即别名
Note 引用并非对象,相反的,它只是为一个已经存在的对象所起的另外一个名字。
为引用赋值,实际上是把值赋给了与引用绑定的对象。获取引用的值,实际上是获取了与引用绑定的对象的值。同理,以引用作为初始值,实际上是以与引用绑定的对象作为初始值:
//正确:refVal3绑定到了那个与refVal绑定的对象上,这里就是绑定到ival上
int &refVal3=refVal;
//利用与refVal绑定的对象的值初始化变量i
int i=refVal;
因为引用本身不是一个对象,所以不能定义引用的引用。
引用的定义:
(个人感觉其实和普通的规则没有什么区别,记得变量名前面加个符号就好了)
int&refVal4 = 10; //错误:引用类型的初始值必须是一个对象。
double dval =3.14;
int&refVal5 = dval; //错误:此处引用类型的初始值必须是int型对象。