Rust中變數的複製與Copy trait

2022-09-19 13:03:08 字數 553 閱讀 4749

示例程式:

fn main() , y = {}", x, y);   // 輸出 x = 123, y = 123

}

上述程式中,在建立變數 y 之後,變數 x 繼續有效。(而不會想 string 的賦值一樣發生移動)

這是因為對於包括整型在內的一些型別來說,在編譯時可以得知自己的大小,並且能夠將自己的資料完整地儲存在棧記憶體中。因為資料的拷貝全部發生在棧記憶體中,所以不會有移動的行為發生,所以此時就是完整地資料的拷貝。

rust 提供了乙個名為copy的 trait,它可以應用在諸如整數這樣完整地儲存在棧上的資料型別。

一旦某種資料型別擁有了 copy trait,它的變數就可以在賦值給其他變數之後保持可用性。

如果一種型別本身或者這種型別的任意成員實現了droptrait,那麼 rust 就不允許其實現 copy trait。嘗試在給某個需要在離開作用域時執行特殊指令(即實現了drop)的型別實現 copy 這種 trait 會導致編譯時錯誤。

Rust 變數與函式

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

copy模組中的copy與deepcopy的區別

每空閒下來,就覺得以前寫的部落格很low.也許現在也很low 好吧就當公升級版的low吧 如果要了解copy與deepcopy的區別,就需要了解python的儲存機制 python在賦值會在記憶體裡開闢乙個空間來存放值這就叫 記憶體位址 同時會開闢乙個空間來存放名字叫命名,在資料相同長度在一定範圍 ...

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...