• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Rust中mut,&,&mut的区别

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

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 concat_literal(s: &mut String) {      
    s.extend("world!".chars());          
}                                        
                                         
fn main() {                              
    let mut s = "hello, ".to_owned();    
    concat_literal(&mut s);              
    println!("{}", s);                   
}               

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap