C++0x – Vorfreude
Der kommende C++ Standard ist echt ein bisschen wie eine Wundertüte. Bei den meisten Sachen kam ich gar nicht so Recht auf den Gedanken, dass ich sie vermisse, bis ich mich mal damit beschäftigt habe. (“Disclaimer”: C++0x ist aber noch nicht standarisiert! Verhaltensweisen etc. können sich theoretisch noch ändern!)
- Lambda Funktionen
Damit wird die ganze <algorithm> Funktionalität der STL drastisch vereinfacht beziehungsweise intuitiver. Auf c.s. notes gibt es eine gute Erklärung was Lambdas eigentlich so sind. In Kurzform: Damit kann man sich z.B. endlich alle möglichen Strukturen, die nur den Operator() implementieren ein für alle mal sparen! - Das auto Keyword
Im “jetzigen” Standard ist auto als eigenes Keyword eigentlich komplett sinnfrei. Es bezeichnet lediglich die “normale” Speicherklasse von Variablen. Aber mit C++0x wird daraus eine Art Kurzschreibweise für “bekannte” Typen. Verkürzt gesagt, hat eine Autovariable immer den Typ der Variable, der ihr als erstes zugewiesen wird. Damit kann man sich z.B. bei Iterationen mittels for() eine Menge Tipparbeit sparen:std::vector<sometype> v; // v sollte natürlich noch mit Werten gefüllt werden, // aber für ein Beispiel geht das auch mal so. // Ohne auto iterieren for (std::vector<sometype>::iterator it = v.begin(); it != v.end(); it++) { std::cout << *it << std::endl; } // Mit auto iterieren for (auto it = v.begin(); it != v.end(); it++) { std::cout << *it << std::endl; *it = anothertype(); // Fehler, it ist vom Typ sometype }
Plötzlich passt die Iteration also sogar bequem in die beschränkte Breite dieses Blogs. Und natürlich könnte man hier auch mit typedefs arbeiten (sollte man imho auch), dadurch verschiebt sich das eigentliche Problem aber nur.
- nullptr
Eines der von C geerbten Probleme von C++ ist es, zwischen dem Zahlenwert 0 und einem Nullpointer zu unterscheiden. C++0x führt (hoffentlich) endlich ein explizit für dieses Szenario gedachtes keyword ein: nullptr. Ich kann hierfür leider kein direktes Beispiel geben (ich find einfach keins), aber alleine die Aussicht auf ein Verhalten wie man es auch von Java oder meinetwegen C# kennt ist großartig!













nullptr ist vor allem für assignment, comparison und arithmetic operations gedacht.
[cpp]
char* c = nullptr; // c hat den nullptr Wert
int n = nullptr; // geht nicht und das ist gut so.
[/cpp]
Tatsache, funktioniert also wie ein eigener Wert (und damit dann ja wirklich wie in C# / Java). Sehr schön und danke für die Aufklärung.