1、什么是引用?
引用是给一个已经定义的的变量取别名,而不是定义一个新的变量。
引用定义格式:类型& 引用变量名 = 已定义变量
2、引用的特点有哪些?
1) 多个变量可以引用一个变量
int a = 10;
int& b = a;
int& c = a;
cout<<a<<" "<<b<<" "<<c<<endl; // 10 10 10
2) 引用必须初始化
int& a; // 语法错误
3) 引用只能在初始化的时候引用一次,不能在改变为引用其他的变量
4) 常量不能被引用
int& a = 10; // 语法错误
const int& a = 10; // 正确,常量具有常性,只有常引用可以引用常量
cout<<a<<endl; // 10
3、引用和const
#include <iostream>
using namespace std;
int main()
{
int a1 = 10;
cout<<a1<<endl; // 10
const int& a2 = a1;
cout<<a1<<" "<<a2<<endl; //10 10
a1 = 5;
cout<<a1<<" "<<a2<<endl; //10 10 ai的值改变,a2的值也会改变
const int a3 = 10;
const int& a4 = a3;
//int& a5 = a3; // 报错
const int& a6 = 5; // 常量具有常性,只有常引用可以引用常量
float a7 = 10.10;
//int& a8 = a7; // 报错,a7是float类型,a8是int型,a7给a8赋值会产生一个临时变量,
// 即a7引用的是这个带有常性的临时变量,所以不能赋值
const int& a9 = a7;
return 0;
}
4、引用和指针
引用是变量别名,指针保存变量的地址,二者其实有异曲同工之妙,都是直接指向对象的内存块,但是引用和指针还是有诸多不同。例如
a) 引用必须初始化;指针可以不初始化
b) 引用只能在定义时初始化一次,之后不能改变指向其他变量;指针指向的对象可以改变
c) 引用不能为空,必须指向有效对象;指针可以为空
d) sizeof指针和引用的含义不同。sizeof引用对象得到的是引用所指对象的大小;sizeof指针变量得到的是对象地址大小
e) 引用和指针自增自减意义不同
f) 引用比指针安全
5、使用引用时的注意事项
a) 不要返回一个临时变量的引用
b) 不要返回函数内部new分配的内存的引用