2012-11-27 8 views
6

Ich habe in einem Beitrag gefunden, wie Elemente aus einem Container mit einem Iterator gelöscht werden. Während Iterieren:auto variable und sein Typ

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 
    } 

Warum ist auto ohne die Art in auto next = it; verwendet?

Ich benutze VS10, nicht C++ 11!

+0

Siehe [C++ 11 Typ Rückschluss] (http://en.wikipedia.org/wiki/C%2B%2B11#Type_Inference) – juanchopanza

+5

VS10 hat C++ 11 standardmäßig aktiviert. Also, Sie verwenden C++ 11. –

Antwort

12

auto hat in C++ 11 eine andere Bedeutung als zuvor. In früheren Standards war auto ein Speicherspezifizierer für die automatische Speicherdauer - der typische Speicher, in dem ein Objekt am Ende seines Bereichs zerstört wird. In C++ 11 wird das Schlüsselwort auto für die Typableitung von Variablen verwendet. Der Typ der Variablen wird von dem Ausdruck abgeleitet, der zur Initialisierung verwendet wird, ähnlich wie Vorlagenparameter aus den Argumenten der Vorlagenfunktion abgeleitet werden können.

Dieser Typ Abzug ist nützlich, wenn hässliche lange Typen eingeben, hat keinen Nutzen. Oft ist der Typ vom Initialisierer offensichtlich. Dies ist auch für Variablen nützlich, deren Typ davon abhängen kann, in welcher Instanziierung eine Vorlage erscheint.

Viele C++ 11-Funktionen werden standardmäßig in VC10 unterstützt und auto ist einer davon.

+0

was? Wird es in VC++ 2010 unterstützt? Ich wusste das nicht –

+0

Bedeutet dies, dass Auto nicht länger Speicherdauer behandelt, oder nur, dass es erhöht hat, was es tut? – MrMesees

4

Es handelt sich um ein Kürzel in neueren Versionen von C++, mit dem wir die klobige Iteratornotation vermeiden können, da der Compiler in der Lage ist zu schließen, was der tatsächliche Typ sein soll.

2

Es heißt Type Inference, siehe auch this question für Details. Neu in C++ 11 und soll viele lange und unnötige Codes vereinfachen, insbesondere für Iteratoren und Funktionsbindungen.

2

Dies wird type inference genannt. Der Typ der Autovariablen wird vom Typ des Initialisierers abgeleitet.

Beispielsweise verringert dies die Menge, die für große und komplizierte Schablonentypen einzugeben ist.

Verwandte Themen