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

问题描述

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

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

    for x in &a {
        sum += *x;
        // sum += x;
    }
}

标签: rust

解决方案


不,这不是自动取消引用的情况。+=运算符(又名 trait )是针对带有和操作数AddAssign的整数类型 ( ) 实现的。TT&T

AddAssign文档

impl AddAssign<i32> for i32
impl<'_> AddAssign<&'_ i32> for i32

推荐阅读