C++ Primer笔记(2.3.1)—— 引用
#include<iostream>
/**********************************************************************/
/* 引用(reference)是为对象起的另外一个名字,引用类型引用另外一种类型。 */
/* 通过将声明符写成 &d 的形式来定义引用类型 */
/**********************************************************************/
int main()
{
/* ----- 例子 ----- */
int ival = 1024;
int &refVal = ival; //refVal指向ival(是ival的另一个名字) /* 一般在初始化变量时,初始化会拷贝到新建的对象中 */
//int &refVal2; //错误:引用必须被初始化 /* 然而定义引用时,程序把引用和它的初始值绑定在一起,而不是拷贝给引用。 */
/* 引用初始化完成后,会和它的初始化对象一直绑定在一起,无法在重新绑定到另外一个对象。 */
std::cout << "ival 的值为:" << ival << std::endl; /* 因此引用必须初始化。 */
std::cout << "refVal的值为:" << refVal << std::endl;
std::cout << std::endl;
/* --------------- */
/* ----- 引用即别名 ----- */
//定义一个引用后,对齐进行的所有操作都是在与之绑定的对象上进行的。
refVal = 2; //把2赋给了refVal指向的对象,此处即是赋给了ival
int ii = refVal; //与ii = ival 一样
std::cout << "ival 的值为:" << ival << std::endl;
std::cout << "refVal的值为:" << refVal << std::endl;
std::cout << "ii 的值为:" << ii << std::endl;
std::cout << std::endl;
/* 为引用赋值,实际上是把值赋给了与引用绑定的对象。 */
/* 获取引用的值,实际上是获取了与引用绑定的对象的值。 */
int &refVal3 = refVal; //将refVal3绑定到了与refVal绑定的对象上
int j = refVal; //i被初始化为ival的值
std::cout << "refVal3的值为:" << refVal3 << std::endl;
std::cout << "j 的值为:" << j << std::endl;
std::cout << std::endl;
/* ---------------------- */
/* ----- 引用的定义 ----- */
//引用本身不是一个对象,所以不能定义引用的引用。
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都是引用
double dval = 3.14;
//int &refVal4 = 10; //错误:引用类型的初始值必须是一个对象
//int &refVal5 = dval; //错误:此处引用类型的初始值必须是int
/* ---------------------- */
return 0;
}