2012-11-27 13 views
6

Ho trovato in un post come eliminare elementi da un contenitore utilizzando un iteratore. Mentre l'iterazione:variabile automatica e il suo tipo

for(auto it = translationEvents.begin(); it != translationEvents.end();) 
    { 
     auto next = it; 
     ++next; // get the next element 
     it->second(this); // process (and maybe delete) the current element 
     it = next; // skip to the next element 
    } 

Perché auto utilizzato senza il tipo di auto next = it;?

Io uso VS10, non C++ 11!

+0

Vedere [Inferenza di tipo C++ 11] (http://en.wikipedia.org/wiki/C%2B%2B11#Type_inference) – juanchopanza

+5

VS10 ha C++ 11 attivato per impostazione predefinita. Quindi, usi C++ 11. –

risposta

12

auto ha un significato diverso in C++ 11 rispetto a prima. Negli standard precedenti, auto era un identificatore di memoria per la durata dell'archiviazione automatica, ovvero la memoria tipica in cui un oggetto è stato distrutto alla fine del suo ambito. In C++ 11, la parola chiave auto viene utilizzata per la deduzione di tipo delle variabili. Il tipo di variabile viene dedotto dall'espressione utilizzata per inizializzarlo, molto nello stesso modo in cui i parametri del modello possono essere dedotti dai tipi di argomenti di una funzione modello.

Questa deduzione di tipo è utile quando la digitazione di tipi brutti lunghi non ha alcun vantaggio. Spesso, il tipo è ovvio dall'inizializzatore. È utile anche per variabili il cui tipo può dipendere dall'istanza di un modello in cui appare.

Molte funzioni di C++ 11 sono supportate di default in VC10 e auto è una di queste.

+0

cosa? è supportato in vC++ 2010? non sapevo che –

+0

Ciò significa che l'auto non gestisce più la durata della memorizzazione, o semplicemente che ha aumentato quello che fa? – MrMesees

4

È una versione ridotta delle versioni più recenti di C++ che ci consente di evitare la notazione di iteratore goffa, poiché il compilatore è in grado di dedurre quale dovrebbe essere il tipo effettivo.

2

Si chiama Type Inference, vedere anche this question per dettagli. Novità in C++ 11, e inteso a semplificare molti codici lunghi e non necessari, in particolare per gli iteratori e le associazioni di funzioni.

2

Questo è chiamato type inference. Il tipo di variabile automatica viene dedotto dal tipo di inizializzatore.

Ad esempio, riduce la quantità da digitare per tipi di modelli grandi e complicati.

Problemi correlati