Hinter den Kulissen von bereichsbasierten C 11-Schleifen
Bereichsbasierte Schleifen bieten eine prägnante Syntax für die Iteration über Elemente einer Sammlung. aber ihr Innenleben ist möglicherweise nicht sofort ersichtlich.
Variableninitialisierung
Während es den Anschein hat, dass die Schleifenvariable (in diesem Fall x) nur einmal initialisiert wird, Die Realität sieht anders aus. In einer bereichsbasierten Schleife wie:
<code class="cpp">for (const int x : vec) { cout << x << endl; }</code>
Der Compiler erstellt für jede Iteration eine neue lokale Variable x. Es initialisiert x mit dem Wert des nächsten Elements im vec-Vektor.
Const-Variablen
Obwohl die x-Variable als const deklariert ist, kann es so aussehen, als ob sie sich in jeder Iteration ändert weil es nicht die gleiche Variable ist. Jedes neu erstellte x wird dem nächsten Element von vec zugewiesen, wodurch die Illusion entsteht, dass dieselbe Variable geändert wird.
Implementierungsdetails
Bereichsbasierte Schleifen werden implementiert Verwenden von Iteratoren, bei denen es sich um Objekte handelt, die Zugriff auf die Elemente einer Sammlung ermöglichen. Im obigen Code verfügt vec über einen Iterator, der von den Funktionen begin() und end() zurückgegeben wird. Der Iterator wird verwendet, um die Elemente schrittweise zu durchlaufen, und x wird dem Wert zugewiesen, auf den der Iterator zeigt.
Zusätzliche Hinweise
Das obige ist der detaillierte Inhalt vonWie funktionieren C 11 Range-Based Loops unter der Haube?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!