2014-10-24 16 views
5

Guru C++ Herb Sutter propone che dovremmo quasi sempre usare "auto". Lo afferma sul suo website e lo ha recentemente ripetuto allo CppCon 2014 conference."Usa sempre Auto" in C++ 11?

Ho provato a seguire il suo consiglio e non ne sono convinto. C'è qualcuno qui che concorda con Sutter e chi mi può dire perché

auto gender = string{}; 
auto number = string{}; 
auto person = string{}; 

è meglio di

string gender, number, person; 

che è quello che ho finito per scrivere nel mio codice, perché non potevo sopportare l'auto stile.

Edit:

auto gender = string{}, number = string{}, person = string{}; 

è anche una possibilità, ma a mio parere questo è ancora peggio.

+7

Fai un favore a te stesso ea tutti gli altri e usa std :: string invece di string. – gnasher729

+4

Anche dichiarare più variabili su una riga è di solito disapprovato. – gnasher729

+0

Quando inizi a lavorare solo con i tipi di modelli, avrà senso usare auto (quasi esclusivamente). – Shaggi

risposta

1

La parola chiave auto dovrebbe principalmente essere utilizzato nei casi in cui si inizializza la variabile con un valore, in quanto ciò rende il codice più mantenibile nei casi in cui si modifica il valore si inizializza la variabile con:

uint16_t id_ = 65535; 

uint16_t id() 
{ 
    return id_; 
} 

auto myid = id(); 

No è necessario modificare il tipo di myid se le modifiche al tipo di ritorno sono id().

E con C++ 14 è ancora meglio:

uint16_t id_ = 65535; 

decltype(auto) id() 
{ 
    return id_; 
} 

auto myid = id(); 

Modifica del tipo di id_ regola automaticamente il tipo di ritorno di id() e il tipo di myid.

Nei casi in cui il valore iniziale della variabile non è inizializzato con un valore e come tale non dipende da altro codice per l'inizializzazione, ha senso definire esplicitamente il tipo di variabile, in quanto la parola chiave auto non aggiungerebbe più manutenibilità al codice e la sintassi auto gender = string{}; è meno leggibile di string gender;.

+3

Hai ragione in questo caso. Ma la domanda riguarda un caso in cui esiste una costruzione diretta di un oggetto con il costruttore predefinito. Non ho problemi con l'auto nella situazione che menzioni qui, ma ritengo che 'type variable' sia più semplice e più leggibile di' auto variable = type {} '. – oz1cz

+0

Ah, giusto, ho pensato che fosse una domanda più generale. Il tuo caso è un esempio del perché dice "quasi sempre". Se crei i tuoi oggetti in un ambito di funzione locale, ha anche senso che tu sappia cosa sia il tipo e come tale dovrebbe dichiarare una variabile di quel tipo. 'auto' dovrebbe essere usato per le variabili in cui si ottiene il valore da qualche altra parte e può inizializzarlo da quel valore (in quanto ciò rende il codice più mantenibile, come ho spinto nella mia risposta). – heksesang

+0

Aggiornamento della risposta per rispondere meglio alla domanda effettiva. – heksesang