mut, &, &mut 辨析

资源:内存区块。不同的内存区块位置和大小就是不同的资源。

 

let a = "xxx".to_string();   a绑定到字符串资源A上,拥有资源A的所有权

let mut a = "xxx".to_string();  a绑定到字符串资源A上,拥有资源A的所有权,同时a还可绑定到新的资源上面去(更新绑定的能力,但新旧资源类型要同);

 

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可绑定到新的资源上面去(更新绑定的能力)

 

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 concat_literal(s: &mut String) {
    s.extend("world!".chars());
}

fn main() {
    let mut s = "hello, ".to_owned();
    concat_literal(&mut s);
    println!("{}", s);
}

 

转载于:https://www.cnblogs.com/daogangtang/p/4853275.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值