Skip to content

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.

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à int
auto foot { 12L }; // dedurrà long
auto rootbeer { 5.0F }; // dedurrà float
auto cheeseburger { 10.0 }; // dedurrà double
auto is_active { false }; // dedurrà bool
auto 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.

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 }; // int
auto& 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.

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.