rust 5 move與copy,借用所有權

2021-10-03 04:43:23 字數 1026 閱讀 5721

fn main() -{}",x,y);

let z=x+y;

println!("{}",z);

y=6;

let mut l=0;

l=x+y;

println!("{}",l);

let k=z;

println!("{}",k);

println!("{}",z);

y=9;

println!("{}",y);

}

下面實現了位置表示式z的所有權複製(copy)轉移,每個變數(位置表示式)都有自己的記憶體位置,對該 位置有所有權。在該變數被賦值給其它變數,賦值給其它位置表示式後,會發生所有權轉移

let k=z;
hello, world!

1-2373

39

下面實現了位置表示式mystr的所有權移動(move)轉移, str2對該 位置有所有權,mystr不再有所有權。

fn main() ",mystr)	;

}

編譯提示錯誤:

----- move occurs because `mystr`

has type

`std::string::string`

, which does not implement the `copy`

trait

使用&表示借用所有權,直接獲取記憶體位置

fn main() ",mystr)	;

println!("{}",str2) ;

}

learn1.exe

hello, world!

hello, world!

而下面語句

let x=&51;
表示生成乙個臨時值,臨時位置表示式,值為51,然後借用給x

Rust中變數的移動move

示例程式 fn main s1 執行這段程式會報錯,報錯資訊如下 error e0382 borrow of moved value s1 src main.rs 4 25 2 let s1 string from yuyoubei move occurs because s1 has type s...

rust筆記5結構體

結構體的基本定義方式和使用方式 struct user fn main 上述的結構體是不可變的,如果想要在執行的時候改變結構體的值,需要宣告為可變的結構體 struct user fn main user2.username string from foo1 如果我們想用預設值的方式制定結構,可以利...

Rust 變數與函式

繫結 fn main 上面的 在編譯的時候會出現警告,告訴你繫結的變數都沒有使用過。fn main 而且變數繫結必須要初始化,若是輸出未初始化的繫結會無法編譯 可變性 如果想要可以隨意被賦值 改變使用mut關鍵字 fn main 作用域 與c語言的作用域原理基本類似,用花括號來限制作用域。不同的是,...