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的