GoingNative 2012: Visual C++ 11 doch mit "range-based for loop"

Auf der derzeit tagenden C++-Entwicklerkonferenz GoingNative kündigte Microsoft an, in Visual Studio 11 nun doch bereichsbasierte For-Schleifen verwenden zu können. Initial war das nicht geplant, was für Ärger unter C++-Entwicklern gesorgt hatte.

In Pocket speichern vorlesen Druckansicht 6 Kommentare lesen
Lesezeit: 2 Min.
Von
  • Marc Mutz

Wie Stephan T. Lavavej, Chefentwickler der STL-Implementierung (Standard Template Library) von Microsofts Visual C++ Compiler, auf der Konferenz GoingNative 12 in seiner Präsentation "STL11: Magic && Secrets" mitteilte, wird die Beta der sich in der Entwicklung befindenden Version 11 der Entwicklungsumgebung entgegen den bisherigen Planungen nun doch "range-based for loops" unterstützen.

Mit "range-based for loops", im Deutschen "bereichsbasierte For-Schleifen", kann der C++11-Entwickler effiziente Schleifen ohne umständliches Hantieren mit Iteratoren verwenden. Im Zusammenspiel mit automatischer Typdeduktion (auto) wird dabei aus

for ( std::vector<int>::const_iterator it = v.begin(), end = v.end() ;
it != end ; ++it ) {
const int & i = *it;
doSomethingWith( i );
}

einfach

for ( auto i : v )
doSomethingWith( i );

Nachdem Microsoft-Mitarbeiter im September des letzten Jahres im Blog des Visual-C++-Teams die geplanten C++11-Features vorgestellt hatten, hatte sich die Enttäuschung über deren Umfang unter anderem am Fehlen dieses Features entzündet.

Wie Lavavej, dessen Spitzname treffenderweise "STL" ist, weiter ausführte, verdankt die Implementierung von "range-based for loops" ihre Existenz der Eigeninitiative von C++-Compiler-Entwickler Jonathan Caves. Lavavej steuerte die Testsuite bei.

Für die Quellcode-Vervollständigung IntelliSense von Microsofts IDE kam die Änderung jedoch zu spät ("vier Tage vor.dem Schließen der Entwicklung für neue Features" (Feature-Freeze)). Entwickler werden in der IDE daher aller Voraussicht nach rote Korrekturlinien unter "range-based for loops" erhalten. Die Implementierung im Compiler sei jedoch – bis auf die Unterstützung von brace-initializer-list als expression (for ( int i : {1, 2, 4, 8, 16} )) – vollständig, so der STL-Experte. (ane)