Rec*_*ion 20 constants move 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);
}
Run Code Online (Sandbox Code Playgroud)
由于A既不是 也不Clone是Copy,我认为 的值GLOBAL_A会被移动。这对于 const 没有多大意义,并且如图所示无论如何都不会是这种情况,因为它可以“移动”两次。
什么是允许的规则上面的代码工作考虑A是不是Clone也没有Copy?
mca*_*ton 21
常量总是内联的。您的示例与
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);
}
Run Code Online (Sandbox Code Playgroud)
该值被重建两次,所以它不需要是Copyor Clone。
另一方面,statics 没有内联:
struct A {
pub val: u32
}
static GLOBAL_A: A = A {val: 2};
fn main() {
let some_a: A = GLOBAL_A;
}
Run Code Online (Sandbox Code Playgroud)
结果是
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`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
595 次 |
| 最近记录: |