我是这门语言的新手,目前正在阅读 Rust 的实践。我明白为什么你能够在for循环后访问向量。但是,我不明白为什么这有效:
let list = [1, 2, 3, 4, 5];
for item in list {
println!("{}", item);
}
println!("{:#?}", list);
Run Code Online (Sandbox Code Playgroud)
如果我对向量尝试同样的操作,如果它不是 内部的引用for,它就无法工作,我明白为什么。
Sil*_*olo 10
数字数组永远不会移动。Copy如果数组的基础类型为,则数组就是Copy,这意味着,与基本数字类型一样,它们总是被复制而不是移动。它们有资格享受这种特殊待遇,因为数组只是表示其元素的连续字节块,因此如果可以逐字节复制其元素,那么整个数组也可以。另一方面,向量涉及动态分配和指针,因此盲目复制向量的字节是不安全的。
当您使用for循环时,您正在调用按值into_iter获取的类型。对于不是self的类型,这需要移动循环的目标来构造迭代器。但对于 的类型,Rust会创建数组的副本,然后使用该副本。 CopyforCopyinto_iter
正如相关文档(上面链接)所述:
[...] 创建一个消耗迭代器,即将每个值移出数组(从头到尾)的迭代器。调用此函数后,除非 T 实现
Copy,否则无法使用该数组,因此会复制整个数组。
强调我的
| 归档时间: |
|
| 查看次数: |
115 次 |
| 最近记录: |