所有原始类型都实现了复制特征吗?

时间:2017-01-01 04:21:04

标签: rust

是否所有primitive types in Rust都实现了Copy特质?

知道这一点很有意思,因为这些知识肯定是全面学习新编程语言的一部分。

1 个答案:

答案 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)。