请考虑以下代码:
fn main() {
let greater_than_42 = (0..100).find(|x| *x > 42);
match greater_than_42 {
Some(x) => println!("{}", x),
None => println!("no numbers found"),
}
}
如果我改为:
let greater_than_42 = (0..100).find(|x| x > &42);
它会比较内存地址而不是值吗?
答案 0 :(得分:2)
简单地尝试它将清楚地证明情况并非如此。
在Rust中,原始指针(*const T
和*mut T
)是内存地址重要的唯一地方。
参考文献(&T
和&mut T
)以这种方式透明;如果你想比较内存地址(例如,看看两个不可变引用是否属于同一个位置,虽然这是Rust的所有权模型的实际应用非常有限),你需要先将它们转换为原始指针。