Почему `sum = x` работает так же, как `sum = * x` для целых типов? Это автоматическое разыменование?

#rust

#Ржавчина

Вопрос:

Как некомментируемый, так и комментируемый код приводят к одному и тому же sum значению. Я не уверен, что здесь происходит, но я ожидаю, что компилятор выдаст ошибку при неиспользовании разыменования.

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

    for x in amp;a {
        sum  = *x;
        // sum  = x;
    }
}
  

Ответ №1:

Нет, это не случай автоматического разыменования. = Оператор (он же признак AddAssign ) реализован для целых типов ( T ) с обоими T и amp;T операндами.

Из AddAssign документов:

 impl AddAssign<i32> for i32
  
 impl<'_> AddAssign<amp;'_ i32> for i32