1.引用的概念
引用的本质是指针。
变量名,本身就是一段内存的引用,即别名(alias)。此处引入的引用,是为已有变量起一个别名。
声明如下:
int main(){
int a;
int &b = a;
}
1.1.规则
1.1.1.引用没有定义,类型和原类型一致,且不分配内存,与被引用的变量有相同的地址。
1.1.2.声明的时候必须初始化,一经声明不得变更。
1.1.3.可对引用再次引用,多次引用的结果,是某一个变量的别名。
1.1.4.&符号前有数据类型是是引用,其它皆是取地址。
int main(){
int a,b;
int &r = a;//必须初始化。
int &r = b;//错误,不能更改原有的引用关系。
float &rr = b;//错误,引用类型不匹配。
cout << &a << &r << endl;//变量与引用具有相同的地址。
int &ra = r;//可对引用多次引用。表示变量a有两个别名,分别是ra和r。
}
1.2.引用的应用
C++很少使用独立变量的引用,如果使用某一个变量,就直接使用它的原名,没必要使用它的别名就引用。
值作函数参数:
void swap(int a,int b);//无法实现两数据的交换。
void swap(int *a,int *b);//开辟了两个指针空间实现交换。
引用作函数参数:
void swap(int &a,int &b)//可以用引用解决的问题尽量避免用指针来解决。
1.3.引用的提高
引用的本质是指针,C++对裸露的内存地址(指针)做了一次包装。
1.3.1.可以定义指针的引用,但不能定义引用的引用。
int a;
int *p = &a;
int * &rp = p;//ok.
int & r = a;
int && rr = r;//错误,**对引用取地址,建立引用的指针没有意义**,所以不能定义引用的引用。
1.4.常引用(const)
const 引用使用的比较多。它可以防止对象的值被随意修改。
(1)const对象的引用必须是const的,将普通引用绑定到const对象时不合适的(因为const是不能被修改的)。
(2)const引用可使用相关类型的对象(常量,非同类型的变量或表达式)初始化。
const int &a = 2;const int &b = a;都是合法的。
int i = 5;
const int &j = i+5;//输出i = 5,j = 10;
1.5.尽量使用const可避免无意修改数据的编程错误。