C++ 引用学习笔记

在 C++ 中,引用是一种特殊的变量类型,它相当于已经存在的变量的别名。引用必须在声明时就进行初始化,且一旦初始化后就不能再指向其他变量。

声明和初始化引用

声明引用

引用的声明方式为:

c++Copy Code
type& name;

其中,type 表示引用的类型,name 表示引用的名称。注意,在声明引用时,必须同时进行初始化,例如:

c++Copy Code
int i = 10; int& ref_i = i;

这个例子中,ref_ii 的引用,也就是说,ref_ii 指向同一个内存地址,它们代表同一个变量。

初始化引用

引用只能在声明时进行初始化,初始化方法有两种:

  • 直接将变量赋值给引用:
c++Copy Code
int i = 10; int& ref_i = i;
  • 将函数的返回值(或表达式)赋值给引用:
c++Copy Code
int 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 Code
void swap(int& a, int& b) { int temp = a; a = b; b = temp; } int a = 1, b = 2; swap(a, b);

这个例子中,swap 函数接收两个 int 类型的引用,它们代表 ab。在函数内部,交换 ab 的值。

返回值

如果一个函数需要返回多个值,可以使用引用来实现。例如:

c++Copy Code
void 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::vectorstd::mapstd::set 等)都支持引用遍历。例如:

c++Copy Code
std::vector<int> vec = {1, 2, 3, 4, 5}; for (int& i : vec) { i *= 2; }

这个例子中,使用引用 int& 遍历 vec 容器,并将每个元素乘以 2。