是否所有primitive types in Rust都实现了Copy
特质?
知道这一点很有意思,因为这些知识肯定是全面学习新编程语言的一部分。
答案 0 :(得分:10)
我们可以使用编译器来证明某些东西是否实现Copy
。使用the list of primitives from The Rust Programming Language:
fn a_function() {}
fn is_copy<T>(_val: T) where T: Copy {}
fn main() {
is_copy(true); // boolean
is_copy('c'); // char
is_copy(42i8);
is_copy(42i16);
is_copy(42i32);
is_copy(42i64);
is_copy(42u8);
is_copy(42u16);
is_copy(42u32);
is_copy(42u64);
is_copy(42isize);
is_copy(42usize);
is_copy(42f32);
is_copy(42f64);
is_copy("hello"); // string slices
is_copy(a_function); // function pointers
}
这里没有涉及三种类型:
那是因为这些类型可以包含多种类型;它们通过泛型参数化。如果所有包含的值均为Copy
,则它们仅为Copy
:
// OK
is_copy([42]);
is_copy((42, 42));
is_copy(&[42][..]);
// Not OK
is_copy([Vec::new()]);
is_copy((Vec::new(), Vec::new()));
is_copy(&[Vec::new()][..]);
与往常一样,documentation for a trait lists everything that implements that trait。 (除非有bugs in the documentation)。