int main()
{
//对象是具有某种数据类型的内存空间
int ival = 1024;
//引用为对象起了另外一个名字,引用类型引用(指的是)另外一种类型
//一般初始化变量时初始化值会被拷贝到新建对象,而定义引用时程序把引用和它的初始值绑定(bind)
//通过将声明符写成&d的形式来定义引用类型,d是声明的变量名
int &refVal = ival;//reVal指向ival,reVal成为了ival的别名
int &refVal2;//ERROR:引用必须初始化
refVal = 2;//把2赋给reVal指向的对象,实质上是为ival赋值
int ii = refVal;//等同于ii = ival;
int &refVal3 = refVal;//refVal3绑定到了那个与reVal绑定的对象上,即ival
//几种引用的定义方法
int i = 1024, i2 = 2048;
int &r = i, r2 = i2;
int i3 = 1024, &ri = i3;
int &r3 = i3, &r4 = i2;
//几种常见错误
int &refVal4 = 10;//引用类型的初始值必须是一个对象
double dval = 3.14;
int &refVal5 = dval;//这里引用类型的初始值必须是int类型的对象
//练习
//判断下列定义是否合法
int ival0 = 1.01;//合法
int &rvall = 1.01;//不合法
int &rvall2 = ival0;//合法
int &rvall3;//不合法
int i = 0, &r1 = i;
double d = 0, &r2 = d;
//判断下列赋值是否合法
r2 = 3.14159;//合法,相当于给d赋值
r2 = r1;//合法,相当于 d = i
i = r2;//合法,i = 0
r1 = d;//合法,i = 0
}