我是Rust的新手,试图学习引用的工作原理。在下面的代码中,当我想对a1
进行计算时,它是一个i32
,我不需要对其进行解引用。但对于b1
,它是一个Box
,我必须对其进行解引用。
实际上,let a2 = a1 * 2;
和let a3 = *a1 * 2;
的行为类似。看起来在基本类型中解引用是可选的,或者编译器隐式地为我们完成了这个过程。
fn main(){
let a = 5;
let b = Box::new(10);
let a1 = &a;
let b1 = &b;
println!("{} {}", a1, b1);
let a2 = a1 * 2;
let b2 = (**b1) * 10;
let a3 = *a1 * 2;
println!("{} {} {}", a2, a3, b2);
}
能有人解释一下这个功能吗?
i32
。 - Steve Klabnik