1. 引用
Refer to C++ Primer 4th Edition
引用是对象的别名,实际应用中,主要做函数的形式参数。
引用是一种复合类型,通过变量名前加“&”定义,引用定义时必须指向一个已初始化的对象
int iVal = 1024;
int &refVal = iVal;
int &refVal2; //Error as a reference must be initialized
int &refVal3 = 3; //Error as the initializer must be an object, but legal if it a const reference
1.1 const引用
const引用是对const对象的引用,const对象不能被非const引用所引用,但是const引用可以指向非const对象。如果引用为const的,则表明不能对此引用赋值(也不能通过const引用改变对象的值),也就是说不能改变引用的引用对象,他只能指向这个对象。对const引用赋值会有编译错误。
const int iVal = 1024;
const int &refVal = iVal;
int &refVal2 = iVal; //Error as the reference is not const
const引用可以用常量或者表达式初始化,非const引用则不行
int i = 22;
const int &ref = 42;
const int &ref2 = ref + i;
const引用可以初始化为不同类型的对象,但非const引用只能初始化成相同类型的对象。但是这种情况下,const引用并非指向此对象,而是指向了一个新建的同类型的对象
double dval = 23.2;
const int &ref = dval; //works
const引用初始化不同类型对象是,编译器实际上新建了一个同类型的对象,const引用是指向的这个对象。所以如果改变对象的值,const引用对象的值是不会改变的
int temp = dval; //created by compiler
const int &ref = temp; //const reference actually refer to the temp object
dval = 25.2; //the value of ref is still 23
引用的本质观点:http://www.douban.com/note/282520446/
引用变量占不占内存?