1、引用的使用及其注意事项
引用在C++中常常用来代替指针操作,今天我们就来谈谈引用的使用及其一些注意事项;
引用的作用:引用通俗的理解就是类型别名。如:
对应代码表示为:int a = 88; int &ret = a;
引用的注意事项:1、引用必须初始化 2、引用初始化后不再改变
这上面的这两个注意事项要从引用的本质理解。引用的本质为 指针常量。
我们知道,指针常量中常量const 修饰的是指针变量,而不是修饰指针,例:int* const p;
其本质是可以改值,不能改指向!所以引用的特点也是只能修改所指向对象的值,不能修改指向。
2、利用引用作为函数形参
根据上面我们了解了引用的本质后,就可以知道引用适合作为函数形参。下面我们来对比利用引用和指针来编写进行两数交换的函数:
// 指针作为函数形参
void Swap01(int *a,int *b){
int temp = *a;
*a = *b;
*b = temp;
}
// 引用作为函数形参
void Swap02(int &a,int &b){
int temp = a;
a = b;
b = temp;
}
指针作为函数形参,代码相对于引用作为函数形参比较复杂,而且传参的时候还要记得加取地址符,修改所指向的地址还用解引用,很容易出错,忘记写取地址符等等。
而引用就很好的解决了这些问题,只需要注意实现本身,不需要过分注意语法。
3、引用作为函数返回值
引用作为函数返回值与函数返回指针一样,都是返回索引地址,所以必须返回有效地址。但是利用引用我们可以保证返回的指向不会改变,不会导致返回后不小心改变了指针的指向,导致内存泄漏问题(利用了引用的特点)。
// 引用作为函数返回值
int& sumNumber(int a,int b){
static int sum = a + b;
return sum;
}
这里加static的作用是为了保证返回的是有效地址。
4、const 修饰引用
const修饰引用的本质其实是: const Type * const ptr;
使得不能改指向也不能改值!常常作为函数形参,防止在函数中不小心改变了引用所指向的值。
// 常量引用
void output(const int& num){
std::cout << num << std::endl;
}
5、总结
* 注意事项: * 1、引用必须要初始化 * 2、引用在初始化后不能再被更改指向 * * 作用:函数传参时,可以利用引用的技术让形参修饰实参 * 优点: 可以简化指针修改实参 * 总结:通过引用参数产生的效果同按地址传递是一样的。引用的语法更加简单清楚 * * * 引用可以作为函数返回值 * 1、不要返回局部变量引用 * 2、函数的调用可以作为左值