对于整数类型,为什么 `sum += x` 与 `sum += *x` 的工作方式相同?这是自动取消引用吗?

J.C*_*ona 3 rust

未注释和注释的代码都产生相同的sum值。我不确定这里发生了什么,但我希望编译器在不使用取消引用时抛出错误。

fn main() {
    let a = vec![0, 1, 2, 3, 4];
    let mut sum = 0;

    for x in &a {
        sum += *x;
        // sum += x;
    }
}
Run Code Online (Sandbox Code Playgroud)

kmd*_*eko 7

不,这不是自动取消引用的情况。的+=操作者(又名性状AddAssign)为整数类型(实现T)与两个T&T操作数。

AddAssign文档

impl AddAssign<i32> for i32
Run Code Online (Sandbox Code Playgroud)
impl<'_> AddAssign<&'_ i32> for i32
Run Code Online (Sandbox Code Playgroud)