当为枚举类型实现trait Copy时,出现“trait Clone is not implemented”的错误提示。

22
以下代码:
#[derive(Copy)]
enum MyEnum {
    Test
}

给我报错: error:类型未实现特性core::clone::Clone [E0277]

为什么会这样,我该如何解决?

2个回答

26

Copy特性是Clone的子特性,因此如果实现了Copy,就必须同时实现Clone

#[derive(Copy, Clone)]
enum MyEnum {
    Test
}

这是有道理的,因为CopyClone都是复制现有对象的方法,但具有不同的语义。 Copy可以通过仅复制构成对象的比特位(如C中的memcpy)来复制对象。 Clone可能更加昂贵,并且可能涉及分配内存或复制系统资源。任何可以使用Copy复制的内容也可以使用Clone复制。


1
我记得有一次讨论过在derive实现中自动推导先决条件特征的问题;你知道这个计划是否仍在进行中,或者是否存在被拒绝的方法? - Matthieu M.

8
这是因为特质Copy依赖于特质Clone。编译器不会尝试推断和实现这个特质。因此,您必须明确地实现Clone特质。
像这样:
#[derive(Copy,Clone)]
enum MyEnum {
  Test
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接