Sono nuovo di Rust e sto cercando di imparare come funzionano i riferimenti. Nel seguente codice quando voglio fare un calcolo su a1
che è i32
Non devo dereferenziarlo. Ma con b1
che è un Box
, devo dereferenziarlo.Rust esegue la dereferenziazione automatica di riferimenti di tipo primitivo?
In realtà entrambi i tipi let a2 = a1 * 2;
e let a3 = *a1 * 2;
si comportano in modo simile. Sembra che il dereferenziamento nei primitivi sia facoltativo OPPURE il compilatore lo sta facendo implicitamente per noi.
fn main(){
let a = 5;
let b = Box::new(10);
let a1 = &a;
let b1 = &b;
println!("{} {}", a1, b1);
let a2 = a1 * 2;
let b2 = (**b1) * 10;
let a3 = *a1 * 2;
println!("{} {} {}", a2, a3, b2);
}
Qualcuno può spiegare questa funzionalità?
Sì, i valori letterali dei numeri non vincolati sono predefiniti come "i32". –