引用的理解
- 字面理解: 变量的别名
- 指针常量 int * const p
引用的规则
- 引用作为本地变量的时候必须被初始化,作为类的成员变量或者出现在参数列表中可以不用被初始化。其中作为类的成员变量时必须在构造函数初始化列表为该成员变量初始化
- 初始化是一种绑定关系,即只能引用其初始化的左值,且绑定关系不能改变
- 所引用的target一定要有location
引用和指针的比较
- 引用不能为null,指针可为null
- 引用必须依赖在某个已有的变量上,因此可称为其他变量的别名;指针与已有的变量是独立的
- 引用不可以指向新地址,指针可以
从以上可以看出引用就是指针常量
引用的限制
- 没有引用的引用
- 指针不能指向引用(引用的地址不能得到)int &* p,但可引用指针 int *&p;
- 没有引用数组,
函数中的引用
函数返回值引用
- 函数返回值引用。与指针机制相同,指针不能返回一个本地变量的地址,引用也不能返回一个本地变量(引用的实质是指针常量),当返回一个引用,可将其用作左值和右值
函数参数引用
- 当不希望传递的引用参数不会被函数修改,用const修饰函数参数
- 传递的参数需要为左值(即有已有location),所以计算结果不能传递(编译器将计算结果保存在匿名的const iny 临时变量,所以当函数参数为const 引用时,可以传递计算结果)