ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Rust中mut, &, &mut的区别

2022-02-03 13:32:46  阅读:350  来源: 互联网

标签:mut String 区别 含义 绑定 Rust fn 资源


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

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);                   
}               

  

标签:mut,String,区别,含义,绑定,Rust,fn,资源
来源: https://www.cnblogs.com/pythonClub/p/15861403.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有