C ++ 11 presenta la nuova dichiarazione di tipo auto
, che consente di lavorare con un oggetto senza mai conoscerne il tipo effettivo.
Io uso solo linguaggi strongmente tipizzati - C ++, Delphi (Object Pascal), Go, ecc. e mi sento a disagio (colpevole?) usando auto
, (o per esempio la dichiarazione di variabile breve - x:=1
- in Go. Mi sembra un trucco: io uso le lingue strongmente tipizzate perché garantiscono che tu sappia che tipo stai usando. (Ad eccezione dell'abuso di puntatori non tipizzati.) Anche se certamente apprezzo i benefici: nomi di tipi corretti che coinvolgono iteratori, modelli, puntatori intelligenti ecc. Possono diventare molto lunghi e un po 'difficili da determinare e dichiarare esplicitamente o da analizzare durante la lettura. Certo, una volta che conosci il nome corretto del tipo, puoi "digitarlo", ma a volte farlo bene la prima volta richiede molto tempo e non è sempre così facile.
Oppure immagina che tu erediti un progetto ampio e complesso che devi modificare e ogni variabile possibile in quel progetto sia dichiarata usando auto
- dovrai fare molto più lavoro per capire quel codice -base che se tutto è stato dichiarato usando tipi espliciti.
Quindi, quali sono alcune linee guida su quando utilizzare auto
e quando esportarlo con nomi di tipi completi e corretti? Attualmente sto leggendo il A Tour of C ++ di Stroustrup e lui stesso nel Capitolo 1 sostiene l'utilizzo di auto
in situazioni in cui sai che auto
"va bene":
We use auto where we don’t have a specific reason to mention the type explicitly. “Specific reasons” include:
• The definition is in a large scope where we want to make the type clearly visible to readers of our code.
• We want to be explicit about a variable’s range or precision (e.g., double rather than float).
Nella sezione Consigli del Capitolo 1, inoltre, avverte:
-Prefer the {}-initializer syntax for declarations with a named type;
-Prefer the = syntax for the initialization in declarations using auto;
Questo, perché l'inizializzazione di default {}
potrebbe causare un'inizializzazione errata del tipo.
Tuttavia, mi sento un po 'a disagio con auto
.
Qualcuno può darmi qualche indicazione aggiuntiva sull'uso di auto
, e / o sfatare la mia impressione che auto
sia una sorta di hack e in realtà dovrebbe essere evitato per determinare il tipo corretto e quindi usare un typedef
?