fn main() {
let mut x: Vec<&i32> = vec![];
let a = 1;
x.push(&a);
drop(x);
// x.len(); // error[E0382]: use of moved value: `x`
} // `a` dropped here while still borrowed
Run Code Online (Sandbox Code Playgroud)
编译器知道drop()丢弃x(从注释掉的代码中的错误可以看出),但仍然认为变量是借用的a!这不公平!
这应该被认为是众多生锈/锈病#6393之一(现在由rust-lang/rfcs#811跟踪?)但是那里的讨论似乎集中在一个块中制作&mut self和&self共存.