C++ 引用
引用(Reference)
-
在C语言中,使用指针可以间接获取、修改某个变量的值
-
在C++中,使用引用(Reference)可以起到跟指针类似的功能
// 引用的格式 int age = 30; int &rAge = age; // rAge就是一个引用
-
注意点
- 引用相当于是变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用)
- 对引用做计算,就是对引用所指向的变量做计算
- 在定义的时候必须初始化,一旦指向了某个变量,就不可以再改变,“从一而终”
- 可以利用引用寝化另一个引用,相当于某个变量的多个别名
- 不存在【引用的引用、指向引用的指针、引用数组】
-
引用存在的价值之一
- 比指针更安全、函数返回值可以被赋值
-
引用的本质就是指针,只是编译器削弱了它的功能,所以引用就是弱化了的指针
-
一个引用占用一个指针的大小
常引用(Const Reference)
- 引用可以被 const 修饰,这样就无法通过引用修改数据了,可以称为常引用
- const必须写在&符号的左边,才能算是常引用 (int const &rAge)
const引用的特点
- 可以指向临时数据(常量、表达式、函数返回值等)
- 可以指向不同类型的数据
- 作为函数参数时(此规则也适用于const指针)
- 可以接收const和非const实参(非const引用,只能接受const实参)
- 可以跟非const引用构成重载
* 当常引用指向了不同类型的数据时,会产生临时变量,即引用指向的并不是初始化时的那个变量
数组的引用
- 常见的2种写法
int array[] = {10, 20, 30}; int (&ref1)[3] = array; int * const &ref = array;
// 补充知识 // 指针数组,数组里面可以存放3个int * int *p; int *array1[3] = {p, p, p}; // 用于指向数组的指针 int (*array2)[3];
引用的补充
-
int v1 = 10; int v2 = 20; // ref1不能修改指向,但可以通过ref1间接修改所指向的变量 int & const ref1 = v1; ref1 = 30; // ref2不能修改指向,不可以通过ref2间接修改所指向的变量 int const &ref2 = v1; // ref2 = 40; 编译不过 // p1不能修改指向,可以利用p1间接修改所指向的变量 int *const p1 = &v1; // p1 = &v2; 编译不过 *p1 = 50; // p2可以修改指向,不可以利用p2间接修改指向的变量 int const *p2 = &age; p2 = &v2; // *p2 = 60;编译不过