Rust中mut, &, &mut的区别
资源:内存区块。不同的内存区块位置和大小就是不同的资源。
str
let a = "xxx".to_string();
含义:a绑定到字符串资源A上,拥有资源A的所有权
let mut a = "xxx".to_string();
含义:a绑定到字符串资源A上,拥有资源A的所有权,同时a还可绑定到新的资源上面去(更新绑定的能力,但新旧资源类型要同);
value
let b = a;
含义:a绑定的资源A转移给b,b拥有这个资源A
let b = &a;
含义:a绑定的资源A借给b使用,b只有资源A的读权限
let b = &mut a;
含义:a绑定的资源A借给b使用,b有资源A的读写权限
let mut b = &mut a;
含义:a绑定的资源A借给b使用,b有资源A的读写权限。同时,b可绑定到新的资源上面去(更新绑定的能力)
String
fn do(c: String) {}
含义:传参的时候,实参d绑定的资源D的所有权转移给c
fn do(c: &String) {}
含义:传参的时候,实参d将绑定的资源D借给c使用,c对资源D只读
fn do(c: &mut String) {}
含义:传参的时候,实参d将绑定的资源D借给c使用,c对资源D可读写
fn do(mut c: &mut String) {}
含义:传参的时候,实参d将绑定的资源D借给c使用,c对资源D可读写。同时,c可绑定到新的资源上面去(更新绑定的能力)
函数参数里面,冒号左边的部分,mut c,这个mut是对函数体内部有效;冒号右边的部分,
&mut String,这个 &mut 是针对外部实参传入时的形式化(类型)说明。
练习
fn main() {
// 初始化v
let mut v = vec![1,2,3];
let mut mv = &mut v;
mv[0]=100;
// 初始化v1
let mut v1 = vec![5,6,7];
println!("mv{:?}",&mv);
mv = &mut v1;
println!("mv{:?}",&mv);
// 报错, 提示在借用的过程中变量已经释放, 建议直接使用let... 创建一个更长的生命周期,
// 即 直接 let mut v2 = vec![8,9,10]; 或 再其后添加 mv = &mut mv
//mv = &mut vec![8,9,10];
// 修改后
let mut v2 = vec![8,9,10];
mv = &mut v2;
println!("mv{:?}",&mv);
}
————————————————
版权声明:本文为CSDN博主「rayylee」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hbuxiaofei/article/details/108471806
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2022-03-17 Qt中pri的使用