引用==别名
只是给已有变量起一个别名(别名与变量地址相同)
- 一个变量可以有多个别名(就像一个人可以有很多小名)
- 引用必须在创建时就初始化(起别名时总要知道是给谁起)
- 引用只能在初始化时,引用一次,引用后就不能再改变为其它变量的引用
const 引用
一个变量加上const,就是常变量(常量的一种),具有常性,不可直接修改
注意点:
int d1 = 4;
const int & d2 = d1;
d1 = 5; // d1改变 d2的值也会改变。
//d2 = 6; // 此时的d2为常变量,不能进行赋值
const int d3 = 1;
const int & d4 = d3;
//int&d5 = d3; // 常量具有常性,只有常引用可以引用常量
const int & d6 = 5; //这句为什么对呢?
这句将一个文字常量转化为一个常变量,编译器在这里自己开辟一个值为5的无名整型常变量,然后再给d6,其实就是上面的一种简化
double d7 = 1.1;
//int& d8 = d7; //d7是double类型,d8是int,d7赋值给 d8时要生成一个临时变量
// 也就是说d8引用的是这个带有常性的临时变量,所以不能赋值。
const int& d9 = d7;
传值返回&传引用返回
- 传值返回时,是传一个值
- 传引用返回时只是传一个地址
结论:
1. 不要返回一个临时变量的引用。
2. 如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更高效,但如果只是临时的变量,那么出了作用域就销毁掉了,就找不到传回的地址了。
虽然引用原理也是通过访问地址,和指针有点相似,但根指针是有区别的