C++0x – Vorfreude

November 2nd, 2008 | Kategorien: C++ | Tags:

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!
No comments yet.