C++有好几种复合类型,这里介绍一下其中最重要的两种:引用和指针。首先我们要知道,在C++中,一条声明语句是由一个基本数据类型和紧随其后的一个声明符列表组成。其中每个声明符命名了一个变量并指定该变量为与基本数据类型有关的某种类型。
C++11中新增了一种引用:所谓的“右值引用”,这种引用主要用于内置类。严格来说,当我们使用术语“引用”的时候,指的是“左值引用”。引用的实质就是为对象起了另外一个名字,简单的来说就是为某个变量起了另外一个名字,并且把他与该变量绑定在一起,可以通过修改引用的值来修改绑定的变量的值。
我们可以通过将声明符写成&d的形式来定义引用,其中d是变量名:
int ival = 1024;
int &refVal = ival;//refVal指向ival(他只是ival的另外一个名字)
int &refVal2; //错误:引用必须初始化
这里要注意一点,在C++中,一般初始化变量的时候,初始值会被拷贝到新建的对象中,但是引用则完全不同,在定义引用的时候,程序把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一旦初始化完成,引用将和他的初始值和对象一直绑定在一起。因为无法令引用重新绑定到另外一个对象,所以引用必须初始化。
引用并非对象,正相反,他只是为一个已经存在的对象所起的另外一个名字
当我们定义了一个引用的时候,对于该引用的所有操作都是在与之绑定的对象上进行的,例如前面的引用定义进行如下的操作:
refVal = 2; //其实相当于ival = 2
int ii = refVal //相当于int ii = ival
要反复强调的是,引用并不是对象,所以不能定义引用的引用!同时引用的初始值必须是一个对象。