Rust 引用和借用

2025年3月17日 | 阅读 3 分钟

引用是指作为参数传递给函数的地址。 借用就像我们借用东西一样,当我们完成时,我们会把它还回去。引用和借用是相互的,即当一个引用被释放时,借用也会结束。

为什么要借用?

使用借用概念的原因如下:

  • 借用允许对单个资源进行多次引用,但仍然遵守拥有“单个所有者”。
  • 引用就像 C 中的指针。
  • 引用是一个对象。引用有两种类型,即,可变引用和不可变引用。可变引用被移动,而不可变引用被复制。

让我们通过一个例子来理解这一点。

输出

length of the string 10

在上面的例子中,calculate_length() 函数具有对字符串 str 的引用作为参数,而没有获得它的所有权。

在上面的场景中,&str 是对变量 str 的引用,但它不拥有它。因此,即使引用超出范围,引用所指向的值也不会被删除。

在上述情况下,变量 's' 在控制权没有返回到 main() 函数之前是有效的。当变量作为引用而不是实际值传递给函数时,我们不需要返回值来归还所有权。

让我们尝试修改借用的值。

以下是上述程序的输出


Rust References and Borrowing

在上面的例子中,它抛出一个错误,因为 &x 是一个不可变的引用。 因此,我们无法更改 y 的值。

可变引用

我们可以通过使用可变引用来修复上述错误。 可变引用是可以更改的引用。 让我们通过一个例子来理解这一点。

输出

After modifying, the value of x is 9

在上面的例子中,我们创建了一个可变引用,即 &mut x,该引用由变量 y 指向,变量 y 的类型为 &i32。 现在,我们可以更改 'y' 变量引用的值。 我们赋值 9 i.e*y=9。 因此,值 x 也变为 9,因为两个变量引用相同的内存位置。

可变引用的限制

  • 在特定范围内,我们只能对一块数据进行一个可变引用。

例如

在上述情况下,编译器会抛出一个错误,因为它包含两个在 Rust 语言中不可能出现的可变引用。

  • 如果我们的程序中存在不可变引用,那么我们的程序中不能有可变引用。

例如

在上述情况下,编译器会抛出一个错误,因为当我们有不可变引用时,我们不能有可变引用。


下一个主题Rust 切片