引用(左值引用)
- 引用不是一个对象,没有实际地址,不能定义指向引用的指针。
- 引用只是一个别名,必须和一个已经存在的对象绑定在一起,无法更改,必须初始化。
- 定义引用时,标识符必须以
&
开头。 - 除了两种特殊情况外,所有引用的类型都必须和它绑定的对象严格匹配。
- 引用只能绑定在对象上,不能绑定在字面值或者某个表达式上。(const引用除外)
引用的两种特殊情况
- 初始化常量引用时允许用任意的表达式作为初始值,只要该表达式的结果能够转换成应用的类型即可。其次,允许一个常量引用绑定非常量的对象,字面值,甚至是一个表达式。
1
2double dval = 3.14;
const int &ri = dval;
编译器把上述代码变成了:1
2const inst temp = dval;
const int &ri = temp;
当ri不是常量时,就允许对ri赋值,这样就会改变ri所引用对象的值。但是ri其实是绑定到了一个临时变量temp上,程序员绑定临时变量的目的肯定是想改变dval的值,大家不会想着把引用绑定到临时变量上,然后改变它的值,所以C++就把这种行为归为非法(注:并不是说这种绑定是错误的)。
数组引用形参
参考文献
1.《C++ Primer》第五版中文版