引用和借用
- 引用并不会拥有变量的所有权。
- 默认不允许修改引用的值,但使用可变引用就可以修改引用的值。
- 在同一时间,只能有一个对某一特定数据的可变引用。
- 多个不可变引用是可以的,但是不能在拥有不可变引用的同时拥有可变引用。不可变引用的用户可不希望在他们的眼皮底下值就被意外的改变了。
字符串的clear尝试获得一个可变引用,所以下面的程序会报错。
fn first_word(s: &String) -> &str {
let bytes = s.as_bytes();
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return &s[0..i];
}
}
&s[..]
}
fn main() {
let mut s = String::from("hello world");
let word = first_word(&s);
s.clear(); // error!
println!("the first word is: {}", word);
}