Per le variabili, specifica che il tipo di variabile che viene dichiarato verrà automaticamente dedotto dal suo inizializzatore. Per le funzioni, specifica che il tipo restituito è un tipo di restituzione finale o che verrà dedotto dalle sue dichiarazioni di restituzione (dal C ++ 14).
Sintassi
auto variable initializer (1) (since C++11)
auto function -> return type (2) (since C++11)
auto function (3) (since C++14)
decltype(auto) variable initializer (4) (since C++14)
decltype(auto) function (5) (since C++14)
auto :: (6) (concepts TS)
cv(optional) auto ref(optional) parameter (7) (since C++14)
Spiegazione
1) Quando si dichiarano variabili nell'ambito del blocco, nell'ambito dello spazio dei nomi, nelle istruzioni di inizializzazione di per i cicli, ecc., La parola chiave auto può essere usata come identificatore del tipo. Una volta determinato il tipo di inizializzatore, il compilatore determina il tipo che sostituirà la parola chiave auto utilizzando le regole per la deduzione dell'argomento del modello da una chiamata di funzione (per ulteriori dettagli, vedere deduzione dell'argomento del modello # Altri contesti). La parola chiave auto può essere accompagnata da modificatori, come const o &, che parteciperanno alla detrazione del tipo. Ad esempio, dato const auto& i = expr;
, il tipo di i è esattamente il tipo dell'argomento u in un modello immaginario template<class U> void f(const U& u)
se la funzione chiamaf(expr)
è stato compilato. Pertanto, auto && può essere dedotto come riferimento lvalue o riferimento rvalue secondo l'inizializzatore, che viene utilizzato in base all'intervallo per il loop. Se si utilizza auto per dichiarare più variabili, i tipi dedotti devono corrispondere. Ad esempio, la dichiarazione auto i = 0, d = 0.0;
non auto i = 0, *p = &i;
è corretta , mentre la dichiarazione è ben formata e l'auto viene dedotta come int.
2) In una dichiarazione di funzione che utilizza la sintassi del tipo di ritorno finale, la parola chiave auto non esegue il rilevamento automatico del tipo. Serve solo come parte della sintassi.
3) In una dichiarazione di funzione che non utilizza la sintassi del tipo di ritorno finale, la parola chiave auto indica che il tipo di ritorno verrà dedotto dall'operando della sua dichiarazione di ritorno usando le regole per la deduzione dell'argomento modello.
4) Se il tipo dichiarato della variabile è decltype (auto), la parola chiave auto viene sostituita con l'espressione (o l'elenco delle espressioni) del suo inizializzatore e il tipo effettivo viene dedotto usando le regole per decltype.
5) Se il tipo restituito della funzione è dichiarato decltype (auto), la parola chiave auto viene sostituita con l'operando della sua istruzione return e il tipo restituito effettivo viene dedotto usando le regole per decltype.
6) Un identificatore di nome nidificato del modulo auto :: è un segnaposto che viene sostituito da una classe o da un tipo di enumerazione seguendo le regole per la detrazione di segnaposto di tipo vincolato.
7) Una dichiarazione di parametro in un'espressione lambda. (dal C ++ 14) Una dichiarazione di parametro di funzione. (concetti TS)
Note
Fino a C ++ 11, auto aveva la semantica di un identificatore della durata della memoria. La miscelazione di variabili e funzioni automatiche in un'unica dichiarazione, come in, auto f() -> int, i = 0;
non è consentita.
Per maggiori informazioni: http://en.cppreference.com/w/cpp/language/auto