有时,对于初学者而言,解引用(*)经常让人感觉迷惑。比如:
let v2 = [1_i32, 2, 3];
let mut inidata2: i32 = 0;
for i in &v2 {
inidata2 = i+1;// 没有*
println!("inidata2:{:?},{:?}", inidata2, i);
}
上面为什么不需要解引用(*)?
明明下面的这种情况,是需要解引用的呀?
let v2 = [1_i32, 2, 3];
let mut inidata2: i32 = 0;
for i in &v2 {
inidata2 = *i;
println!("inidata2:{:?},{:?}", inidata2, i);
}
为什么呢?
因为Add已经实现了解引用。
impl<'a>Add <&'a i32>for i32.
impl<'a>Add < i32>for i32.