让我们先来看一段代码:
fn main() {
let s1 = gives_ownership();
let s2 = String::from("hello");
let s3 = takes_and_gives_back(s1);
println!("{}", s1);
println!("{}", s2);
println!("{}", s3);
}
fn gives_ownership() -> String {
let some_string = String::from("hello");
return some_string;
}
fn takes_and_gives_back(a_string: String) -> String {
a_string
}
此时println!("{}", s1);报错:borrow of moved value: `s1`
因为let s3 = takes_and_gives_back(s1);这句已经转移了s1的所有权,此时的s1已经名存实亡。
再来看下面代码:
fn main() {
let s1 = gives_ownership();
let s2 = String::from("hello");
let s3 = takes_and_gives_back(s2);
println!("{}", s1);
println!("{}", s2);
println!("{}", s3);
}
fn gives_ownership() -> String {