在Rust数组上使用for
循环可以正常工作:
fn main() {
let v = [1, 2, 3, 4, 5];
for _ in v.into_iter() {}
for _ in v.into_iter() {}
}
但是替换vec并不能编译:
fn main() {
let v = vec![1, 2, 3, 4, 5];
for _ in v.into_iter() {}
for _ in v.into_iter() {}
}
错误信息:
use of moved value: `v`
我理解为什么这个程序不能与vec一起运行。但是为什么它可以与数组一起工作呢?我原本期望在数组示例中出现类似的错误,但它却没有报错。
move occurs because v has type Vec<i32>, which does not implement the Copy trait
的提示信息,这意味着[i32; 5]
类型实现了Copy
特征,所以你可以多次使用into_iter
而不会移动。 - zenlyCopy
特质,那么每个for
循环都会复制一次数组吗? - TSKCopy
,数组实现了Copy
。是的,对于每个for
循环,数组都会被复制一次。 - kotatsuyakiv
循环编译(其中v
是一个数组),使用&v
循环更有效率,因为避免了整个数组的复制? - TSK