克隆固定大小的数组的最有效方法是什么?

时间:2016-10-09 02:54:24

标签: rust

我有一个结构,由一个固定大小的字节数组和65536个元素组成。

我天真地在我的结构上实现了Clone - 我创建了一个新数组并循环遍历原始数据,一次一个地复制每个元素。是否有一种更有效或惯用的方式来实现这一点,基本上归结为memcpy

1 个答案:

答案 0 :(得分:3)

从Rust 1.12开始,数组仅对最多32个项目实现Clone。但是,数组对任意数量的项目实施Copy(尽管Copy需要Clone!)。因此,我们可以在Clone的实现中创建数组的隐式副本。

struct Foo {
    b: [u8; 65536],
}

impl Clone for Foo {
    fn clone(&self) -> Self {
        Foo {
            b: self.b
        }
    }
}

如果您还希望您的结构实现Copy,那么您也可以通过复制Clone::clone来实现self

#[derive(Copy)]
struct Foo {
    b: [u8; 65536],
}

impl Clone for Foo {
    fn clone(&self) -> Self {
        *self
    }
}