Rust学习入门--【16】Rust 借用所有权 Borrowing / 引用

系列文章目录

Rust 语言是一种高效、可靠的通用高级语言,效率可以媲美 C / C++ 。本系列文件记录博主自学Rust的过程。欢迎大家一同学习。

Rust学习入门–【1】引言
Rust学习入门–【2】Rust 开发环境配置
Rust学习入门–【3】Cargo介绍
Rust学习入门–【4】Rust 输出到命令行
Rust学习入门–【5】源代码文件结构简介
Rust学习入门–【6】Rust 基础语法
Rust学习入门–【7】Rust 数据类型
Rust学习入门–【8】复合类型
Rust学习入门–【9】Rust 函数
Rust学习入门–【10】Rust 条件语句
Rust学习入门–【11】Rust 运算符
Rust学习入门–【12】Rust 循环
Rust学习入门–【13】Rust 字符串(上)
Rust学习入门–【14】Rust 字符串(下)
Rust学习入门–【15】Rust 所有权
Rust学习入门–【16】Rust 借用所有权 Borrowing / 引用
Rust学习入门–【17】Rust Slice(切片)类型



Rust 借用所有权 Borrowing / 引用

Rust 支持对所有权的 出借 borrowing。当把一个具有所有权的变量传递给函数时,就是把所有权借用给函数的参数,当函数返回后则自动收回所有权。


1、什么是借用 Borrowing ?

借用 Borrowing (出借) ,就是 临时性的把东西借给别人,当别人用完了之后就要还回来。

这里的重点有两个字:

  • : 把东西借给他人后,自己就暂时性的失去了东西的所有权。
  • : 借了别人的东西要主动还,这应该养成一个良好的习惯,如果不还,就是 占为己有 了。

Rust 语言中,借用 就是一个函数中将一个变量传递给另一个函数作为参数暂时使用。

同时,Rust 也引用了自动 的概念,就是要求函数的参数离开其作用域时需要将 所有权 还给当初传递给他的变量,这个过程,我们需要将函数的参数定义为 & variable_name,同时传递参数时,需要传递 & variable_name

站在 C++ 语言的角度考虑,就是将 函数的参数定义为引用,同时传递变量的引用。

fn print_vector(x:&Vec<i32>){  // 1. 第一步,定义参数接受一个引用
    println!("Inside print_vector function {:?}",x);
}


fn main(){

    let v = vec![1,2,3];     // 声明一个向量,变量 v 具有数据的所有权
    print_vector(&v);           // 第二步,传递变量的引用给函数
    println!("{}",v[0]);        // 这行会报错
}

编译运行以上 Rust 代码,输出结果如下

在这里插入图片描述

2、可变引用

借用 Borrowing 或者说引用默认情况下是只读的,也就是我们不能修改引用的的变量的值。

例如下面的代码

fn add_one(num: &i32) {
   *num+= 1;
}

fn main() {
   let i = 3;
   println!("before {}",i);
   add_one(&i);
   println!("after {}", i);
}

编译运行以上 Rust 代码,输出结果如下
在这里插入图片描述

编译失败的原因,就像错误信息里说的那样,引用 默认情况下是不可编辑的。

Rust 中,要让一个变量可编辑,唯一的方式就是给他加上 mut 关键字。

因此,我们可以将上面的代码改造下,改成下面这样

fn add_one(num: &mut i32) {
   *num+= 1;
}

fn main() {
   let mut i = 3;
   println!("before {}",i);
   add_one(&mut i);
   println!("after {}", i);
}

编译运行以上 Rust 代码,输出结果如下

从上面的代码中可以看出: 借用 Borrowing 或者说引用的变量如果要变更,必须符合满足三个要求:

  1. 变量本身是可变更的,即定义时必须添加 mut 关键字。
  2. 函数的参数为可变更的,加上 借用 Borrowing 或者说引用,也就是必须添加 &mut 关键字。
  3. 传递 借用 Borrowing 或者说引用也必须声明时 可变更传递,也就是传递参数时必须添加 &mut 关键字。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文斗士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值