引用和借用
一、引用
rust使用 与符号 &
表示引用。允许我们使用一个变量的值,而避免该变量所有值的转移。
fn main() {
let s1 = String::from("hello");
let len = calculate_len(&s1);
println("The length of '{}' is {}", s1, len);
}
fn calculate_len(s: &String) -> usize {
s.len()
}
我们将使用引用作为函数参数的行为称为借用。借用很形象的表达函数所使用的参数的所有权是不属于函数本身的,函数只是暂时借用了此变量的值。 当超出函数作用域后,引用失效。该值不会被销毁,因为该值得所有者仍然存在。
二、不可变引用与可变引用
如果一个声明的引用是不可变的,则不允许改变该引用所指向的值。如果引用是可变的,且该引用指向的值是可变类型,则该可变引用允许改变它指向的值。
fn main() {
let mut s = String::from("hello"); // s is mutable
change(&mut s);
}
fn change(some_string: &mut String) {
some_string.push_str(", world"); // some_string is Mutable reference