Rust中變量的復制與Copy trait


示例程序:

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

上述程序中,在創建變量 y 之后,變量 x 繼續有效。(而不會想 String 的賦值一樣發生移動)

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

Rust 提供了一個名為 Copy 的 trait,它可以應用在諸如整數這樣完整地存儲在棧上的數據類型。

一旦某種數據類型擁有了 Copy trait,它的變量就可以在賦值給其他變量之后保持可用性。

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

擁有 Copy trait 的數據類型

  • 所有的整數類型,比如 u32。
  • 布爾類型:bool。
  • 字符類型:char。
  • 所有的浮點類型,比如 f64。
  • 如果元組包含的所有字段都是 Copy 的,那么這個元素也是 Copy 的。例如:(i32, i32) 是 Copy 的,但 (i32, String) 則不是。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM