use std::collections::HashMap;
// #[derive(Copy, Clone)]
enum SomeEnum {
Some1,
Some2,
}
struct SomeStruct {
pub some_enum: SomeEnum,
pub s: String,
}
fn proc_struct(some_struct: &SomeStruct) {
let mut map = HashMap::new();
map.insert(String::from("any"), 0);
match map.get(&some_struct.s) { // just to make a reference in SomeStruct
Some(v) => {
proc1(some_struct.some_enum);
proc2(&some_struct.some_enum);
}
None => {}
}
}
fn proc1(some: SomeEnum) {}
fn proc2(some: &SomeEnum) {}
fn main() {
let some_struct = SomeStruct { some_enum: SomeEnum::Some1, s: String::from("s") };
proc_struct(&some_struct);
}
Run Code Online (Sandbox Code Playgroud)
上面的代码产生以下错误:
error[E0507]: cannot move out of borrowed content
--> src/main.rs:20:19
|
20 | proc1(some_struct.some_enum);
| ^^^^^^^^^^^ cannot move out of borrowed content
Run Code Online (Sandbox Code Playgroud)
当我添加#[derive(Copy, Clone)]
时SomeEnum
,它编译得很好.
简单的枚举是否应该SomeEnum
得出Copy
特征?功能proc1()
和性能之间是否有任何差异proc2()
?
引用文档:
一般来说,如果你的类型可以实现
Copy
,它应该.
由于您SomeEnum
没有复合变体(例如Vec
s或String
s),我建议使其Copy
能够.它似乎实际上小于对它的引用:
use std::mem;
enum SomeEnum {
Some1,
Some2,
}
fn main() {
assert_eq!(1, mem::size_of::<SomeEnum>());
assert_eq!(8, mem::size_of::<&SomeEnum>());
}
Run Code Online (Sandbox Code Playgroud)
虽然我怀疑在这种情况下你将能够发现任何性能差异.
归档时间: |
|
查看次数: |
2090 次 |
最近记录: |