C++ 引用学习笔记
在 C++ 中,引用是一种特殊的变量类型,它相当于已经存在的变量的别名。引用必须在声明时就进行初始化,且一旦初始化后就不能再指向其他变量。
声明和初始化引用
声明引用
引用的声明方式为:
c++Copy Codetype& name;
其中,type
表示引用的类型,name
表示引用的名称。注意,在声明引用时,必须同时进行初始化,例如:
c++Copy Codeint i = 10;
int& ref_i = i;
这个例子中,ref_i
是 i
的引用,也就是说,ref_i
和 i
指向同一个内存地址,它们代表同一个变量。
初始化引用
引用只能在声明时进行初始化,初始化方法有两种:
- 直接将变量赋值给引用:
c++Copy Codeint i = 10;
int& ref_i = i;
- 将函数的返回值(或表达式)赋值给引用:
c++Copy Codeint add(int a, int b) {
return a + b;
}
int& ref_add(int& a, int& b) {
int c = add(a, b);
return c; // 不要这样使用,因为返回了一个临时变量的引用
}
int a = 1, b = 2;
int& ref_c = add(a, b); // 正确写法
引用的应用场景
函数参数传递
引用可以用于函数参数的传递,这样可以减少复制变量所需的时间和空间。例如:
c++Copy Codevoid swap(int& a, int& b) {
int temp = a;
a = b;
b = temp;
}
int a = 1, b = 2;
swap(a, b);
这个例子中,swap
函数接收两个 int
类型的引用,它们代表 a
和 b
。在函数内部,交换 a
和 b
的值。
返回值
如果一个函数需要返回多个值,可以使用引用来实现。例如:
c++Copy Codevoid find_max_min(const int array[], int size, int& max, int& min) {
max = array[0];
min = array[0];
for (int i = 1; i < size; ++i) {
if (array[i] > max) max = array[i];
if (array[i] < min) min = array[i];
}
}
int array[] = {1, 2, 3, 4, 5};
int max, min;
find_max_min(array, 5, max, min);
这个例子中,find_max_min
函数会将数组 array
中的最大值和最小值通过引用返回给调用者。
遍历容器
在 C++ 的标准库中,有许多容器(例如 std::vector
、std::map
、std::set
等)都支持引用遍历。例如:
c++Copy Codestd::vector<int> vec = {1, 2, 3, 4, 5};
for (int& i : vec) {
i *= 2;
}
这个例子中,使用引用 int&
遍历 vec
容器,并将每个元素乘以 2。