以下代码:
#[derive(Copy)]
enum MyEnum {
Test
}
Run Code Online (Sandbox Code Playgroud)
给我这个错误:错误:core::clone::Clone没有为类型MyEnum[E0277] 实现特征
为什么会这样,我该如何解决?
She*_*ter 16
的Copy特点是一个subtraitClone,所以你总是需要实现Clone,如果你实现Copy:
#[derive(Copy, Clone)]
enum MyEnum {
Test
}
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为这两个Copy和Clone是复制现有的对象的方式,但不同的语义.Copy只需复制构成对象的位即可复制对象(如memcpyC中所示).Clone可能更昂贵,可能涉及分配内存或复制系统资源.任何可以复制的东西Copy也可以复制Clone.
这是因为特性Copy取决于特征Clone.编译器不会尝试为您推断和实现该特征.所以你必须明确地实现克隆特征.
像那样:
#[derive(Copy,Clone)]
enum MyEnum {
Test
}
Run Code Online (Sandbox Code Playgroud)