![](/img/trans.png)
[英]How do I clone structs in Rust without using either Copy or Clone?
[英]How do global consts that are not copy or clone work in Rust?
假设我有以下片段( 操场)
struct A {
pub val: u32
}
const GLOBAL_A: A = A {val: 2};
fn main() {
let some_a: A = GLOBAL_A;
let other_a: A = GLOBAL_A;
println!("double val = {}", some_a.val + other_a.val);
}
由于A
既不是Clone
也不是Copy
,我假设GLOBAL_A
的值将被移动。 这对于 const 没有多大意义,并且如图所示无论如何都不会是这种情况,因为它可以“移动”两次。
考虑到A
不是Clone
或Copy
,允许上述代码段工作的规则是什么?
常量总是内联的。 您的示例与
struct A {
pub val: u32
}
fn main() {
let some_a: A = A {val: 2};
let other_a: A = A {val: 2};
println!("double val = {}", some_a.val + other_a.val);
}
该值被重建两次,因此它不需要是Copy
或Clone
。
另一方面, static
没有内联:
struct A {
pub val: u32
}
static GLOBAL_A: A = A {val: 2};
fn main() {
let some_a: A = GLOBAL_A;
}
结果是
error[E0507]: cannot move out of static item `GLOBAL_A`
--> src/main.rs:8:21
|
8 | let some_a: A = GLOBAL_A;
| ^^^^^^^^
| |
| move occurs because `GLOBAL_A` has type `A`, which does not implement the `Copy` trait
| help: consider borrowing here: `&GLOBAL_A`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.