O que significa passar um vetor para um loop `for` versus uma referência a um vetor?

Estou confuso com a forma como Rustfor loops de trabalho. Considere o seguinte:

#![feature(core_intrinsics)]

fn print_type_of<T>(_: T) {
    println!("{}", unsafe { std::intrinsics::type_name::<T>() });
}

fn main() {
    let nums = vec![1, 2, 3];
    for num in &nums { print_type_of(num); }
    for num in  nums { print_type_of(num); }
}

Emite o seguinte:

&i32
&i32
&i32
i32
i32
i32

O que significa passar um vetor parafor versus uma referência a um vetor? Por que, quando você passa uma referência, obtém uma referência aos itens e quando passa um vetor real, obtém os itens reais?

questionAnswers(1)

yourAnswerToTheQuestion