C++ compound type reference

引用(左值引用)

  1. 引用不是一个对象,没有实际地址,不能定义指向引用的指针。
  2. 引用只是一个别名,必须和一个已经存在的对象绑定在一起,无法更改,必须初始化。
  3. 定义引用时,标识符必须以&开头。
  4. 除了两种特殊情况外,所有引用的类型都必须和它绑定的对象严格匹配。
  5. 引用只能绑定在对象上,不能绑定在字面值或者某个表达式上。(const引用除外)

引用的两种特殊情况

  1. 初始化常量引用时允许用任意的表达式作为初始值,只要该表达式的结果能够转换成应用的类型即可。其次,允许一个常量引用绑定非常量的对象,字面值,甚至是一个表达式。
    1
    2
    double dval = 3.14;
    const int &ri = dval;

编译器把上述代码变成了:

1
2
const inst temp = dval;
const int &ri = temp;

当ri不是常量时,就允许对ri赋值,这样就会改变ri所引用对象的值。但是ri其实是绑定到了一个临时变量temp上,程序员绑定临时变量的目的肯定是想改变dval的值,大家不会想着把引用绑定到临时变量上,然后改变它的值,所以C++就把这种行为归为非法(注:并不是说这种绑定是错误的)。

数组引用形参

参考文献

1.《C++ Primer》第五版中文版