Rust: 为什么同样的情况,有时不需要解引用?

有时,对于初学者而言,解引用(*)经常让人感觉迷惑。比如:

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.

你可能感兴趣的:(Rust)