在Rust 1.0中,编译器在分析表达式中的所有权时是否考虑评估顺序?例如:
struct Foo { val:usize }
fn main() {
let mut v:Vec<Foo> = Vec::with_capacity(1);
v.push(Foo{val:0});
let f = Foo{val:0};
v[f.val] = f; // error: use of moved value
}
无法编译,因为数组中的索引是f.val,而f正被移动到数组中.我不明白为什么使用f.val作为LHS的索引可能与RHS上’f’的所有权转移相冲突.
最佳答案 这种事情在语言层面没有明确定义,但显然编译器必须做一些事情.