【发布时间】:2018-10-06 18:32:28
【问题描述】:
我想我理解,Rust 中& 和* 之间的区别在很大程度上与内存管理有关。
下面的代码sn-ps有什么区别。采用一种方法与另一种方法相比是否存在危险?
for (i, item) in bytes.iter().enumerate() {
if *item == b' ' {
return i;
}
}
for (i, &item) in bytes.iter().enumerate() {
if item == b' ' {
return i;
}
}
for (i, item) in bytes.iter().enumerate() {
if item == &b' ' {
return i;
}
}
据我了解,当我从iter() 返回一个值时,我返回的是对bytes 中的元素的引用。如果我想对项目进行比较,我需要在两个引用 &u8 之间进行比较,或者我需要让 &item 本身成为一个引用,这样当我调用 item 时它的类型是 u8,或者当我比较它时,我需要取消引用item,以便item = &u8 -> *item = u8。
当我使用
(i, &item)运行代码时,当我稍后调用item时,这是否与第二个示例中的取消引用完全相同,或者编译器如何解释存在根本差异第一个代码sn-p和第二个代码sn-p?第三个代码sn-p有什么问题吗?我意识到这是一个基于意见的问题。我意识到,如果我要使用
item(或*item,或将值分配为引用)为另一个变量分配一个值,我稍后会返回不同的数据类型。除了管理您的数据类型之外,在考虑item == &b' '是否适合这项工作时,还有什么需要注意的吗?
【问题讨论】:
标签: rust