¿Qué significa pasar un vector a un bucle `for` versus una referencia a un vector?

Estoy confundido por cómo Rustfor Los bucles funcionan. Considera lo siguiente:

#![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); }
}

Produce lo siguiente:

&i32
&i32
&i32
i32
i32
i32

¿Qué significa pasar un vector afor frente a una referencia a un vector? ¿Por qué, cuando pasas una referencia, obtienes una referencia a los elementos y cuando pasas en un vector real, obtienes los elementos reales?

Respuestas a la pregunta(1)

Su respuesta a la pregunta