引用
本课程将向您展示如何使用引用间接访问变量。
动机
假设您有一个将参数加倍的函数。
#include <iostream>
void double_number(int num)
{
num = num * 2;
}
int main()
{
int x = 5;
double_number(x);
std::cout << x;
}
5
但这行不通,因为只有 x
的值被写入了 num
。
这就是引用发挥作用的地方。
使用引用
您可以通过在要引用的变量类型后添加 &
来创建引用。
int var = 5;
int& ref = var; // ref is a int reference that refers to var
现在,如果您修改 ref
,var
也会被修改,因为 ref
就是 var
。
ref = 23;
std::cout << var; // Prints out 23
引用传递
现在让我们看看如何使用引用来解决我们的问题。
我们只需要让函数接受一个 int 引用
而不是 int
。
#include <iostream>
void double_number(int &num)
{
num = num * 2;
}
int main()
{
int x = 5;
double_number(x);
}
10
现在,当函数 double_number
接受一个引用时,num
将成为传递给函数的任何变量。这意味着当我们修改 num
(它已经成为 x
)时,我们也会间接修改 x
。
在基于范围的 for 循环中修改元素
在基于范围的 for 循环中也可以看到类似的问题。由于引用成为它所引用的变量,我们可以使用它来访问数组中的元素。
这是一个简单的数组
std::vector<int> arr = {2, 4, 6};
假设我们想给每个元素加 5,可以一个一个地加,但如果数组很大,就会变得很麻烦。
所以循环会来帮助我们!
for (int x : arr)
{
x = x + 5;
}
std::cout << arr[0];
2
但不幸的是,上面的代码不起作用。这是因为只有元素的值被复制到 x
中,而不是元素本身。
这就是我们可以使用引用的地方,它们可以使数组的实际元素被复制到 x
中。
for (int& x : arr)
{
x = x + 5;
}
std::cout << arr[0];
7
现在数组的每个元素都成功增加了五。
您只应在确实需要修改变量时才使用引用。如果您只需要值,请不要使用引用。