Deduzione del Tipo (auto)
In qualità di linguaggio fortemente tipizzato, il C++ dispone di moltissime informazioni durante la compilazione. Quando si inizializzano le variabili o si ritorna da funzioni, il compilatore riesce quasi sempre a intuire autonomamente (a divinare) il tipo corretto.
La parola chiave auto avverte il compilatore di eseguire proprio questa auto-deduzione per noi, slegandoci dalla necessità di digitare verbosità ridondanti.
Inizializzazione con auto
Section titled “Inizializzazione con auto”L’assegnazione classica richiede una forma lieve di ridondanza, in quanto un numero intero è evidentemente un intero anche senza ribadirlo al compilatore:
int answer = 42;Puoi affidare questo onere ad auto:
auto the_answer { 42 }; // dedurrà intauto foot { 12L }; // dedurrà longauto rootbeer { 5.0F }; // dedurrà floatauto cheeseburger { 10.0 }; // dedurrà doubleauto is_active { false }; // dedurrà boolauto cheese { "string" }; // dedurrà const char* (Array Decay silente!)Benché questo snellimento sintattico sia gradito ma modesto sui tipi base, i benefici deflagrano quando si lavora con tipi complessi tipici del C++ moderno (es. con la Standard Library e gli iteratori), facendoci risparmiare digitazioni infinite e, soprattutto, errori.
auto, Puntatori e Reference
Section titled “auto, Puntatori e Reference”Per default, auto deduce il tipo per valore. Tuttavia, è facilissimo e comunissimo aggiungere i modificatori & (reference), * (puntatore), e const alla parola chiave auto stessa, per scolpire il comportamento desiderato:
auto year { 2025 }; // intauto& year_ref = year; // int&const auto& year_cref = year; // const int&auto* year_ptr = &year; // int*L’aggiunta di questi modificatori rende visivamente chiara l’intenzione al lettore del codice.
Refactoring e Range-Based For Loop
Section titled “Refactoring e Range-Based For Loop”Un enorme beneficio celato della deduzione automatica è l’incredibile resilienza del codice ai cambiamenti architetturali (Refactoring).
Se domani tu decidessi di modificare il codice sorgente, cambiando la struttura Dwarf in una nuova classe o modificando il tipo all’interno di dwarves, non avresti alcun bisogno di mettere mano ai cicli for. Il costrutto const auto& si farà trovar pronto, auto-adattandosi dinamicamente al tipo sottostante (come i Nani non si adattano nella Terra di Mezzo, sorride l’autore).
Come regola generale: in C++ moderno, usa sempre auto (Regola AAA: Almost Always Auto) ovunque il tipo sia evidente dal contesto dell’inizializzazione.