Rust - Copy語義對哪些類型默認生效

1、檢測一個類型是否具有copy語義,可以使用下面的函數

fn test_copy(_t: impl Copy) {
    let _tt = _t;
}

2、基本數據類型,都是可以copy的
i8/u8
i32/u32
i64/u64
f32/f64
bool
char
3、由基本類型組合而成的,如數組[T;N],元組(T1,T2),也是Copy的

fn main() {
    let t = [1, 2, 3, 4, 5];
    test_copy(t);
    println!("{:?}", t) // [1, 2, 3, 4, 5]
}
fn main() {
    let t = (1, 2);
    test_copy(t);
    println!("{:?}", t) // (1, 2)
}

4、所有的引用類型,都是Copy的,當然這是廢話

fn main() {
    let t = &String::from("hello");
    test_copy(t);
    println!("{:?}", t) // "hello"
}

5、枚舉,Option,如果T是Copy的,則Option就是Copy的,而Result<>不是

fn main() {
    let t = Some(1);
    test_copy(t);
    println!("{:?}", t) // Some(1)
}

總結

分配在棧上的,sized的類型,一般都是Copy的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章