Wstęp:
Jak w temacie - co myślicie o nowym standardzie C++ (nie widziałem tu takiego tematu, oraz wyszukiwarka nie znalazła)?
Wiem, to dział C++ więc sporo osób czytających to to albo fanboye C++ (dla nich C++ był, jest i będzie doskonały), oraz osoby nie znające żadnych innych języków (nie mające porównania z innymi językami... Aczkolwiek to nie oznacza że nie mogą sie tu wypowiedzieć :>).
Trochę już czasu minęło od jego powstania, więc jakieś opinie można powoli formować. Wiem że 'standard'
sam w sobie nic nie zmienia, ktoś go musi jeszcze zaimplementować. Ale...
Tak w podsumowaniu - nowy standard koncentruje się na:
I. łataniu dziwnostek (czyli c++ wychodzi do ludzi):
- pozwolenie na tworzenie unii z obiektami zawierającymi własny konstruktor
- aliasy dla częściowo specjalizowanych szablonów (nieraz mi tego brakowało...)
- extern templates
- modyfikacja definicji POD-ów (teraz więcej klas może się tak nazywać).
- zmiana WTF-owego znaczenia >> przy szablonach
- sizeof na polach w klasie
II. kopiowaniu sprawdzonych rozwiązań z innych języków (ale to w końcu nic złego):
- silnie typowane enumy
- override i final (tutaj trochę nie wyszło, bo ktoś najwyraźniej nie zrozumiał do końca idei jaka przyświecała słówku override np. w C#, ale zawsze coś)
- odwoływanie się do innych konstruktorów tej samej klasy. (dało się? dało się.)
- range-based for (for (int &x : my_array)) (takie foreach na sterydach)
- long long int (jeśli to można nazwać kopiowaniem z innego języka)
- lambdy!! Jak dla mnie - chyba najważniejsza zmiana. Lubię programowanie funkcyjne i C++ mi to właśnie umożliwił. Spory +. (ciekawe co się stanie jeśli napiszę kod funkcyjny w C++ i go komuś pokażę...)
III. dodawaniu nowych ficzerów (miłe):
- referencje do r-wartości (więcej radości dla początkujących)
- nowa składnia służąca do inicjalizacji obiektu (ciekawe ile WTF-ów wywoła, bo podejrzewam że kilka co najmniej...)
- constexpr jako wyrażenie znane podczas kompilacji (i teraz nie wiem kiedy używać const a kiedy constexpr)
- type interference (słówko kluczowe auto) i decltype (oraz ofc nowa składnia dla deklarowania funkcji).
IV. Rozszerzanie biblioteki standardowej
- obsługa wielowątkowości (czyli C++ wychodzi z prehistorii... jeszcze tylko obsługa sieci i jesteśmy w domu)
- yay, mamy 4 rodzaje smart pointerów! (z czego jeden przestarzały)
- 4 różne hashtable
- regexy w standardzie
- 200 klas do losowania liczb (nie no, podobają mi się, ale nie mam pojęcia czym różni się gamma_distribution od extreme_value_distribution oraz lognormal_distribution od chi_squared_distribution)
- wsparcie dla metaprogramowania
V. Dodawaniu nowych WTF-ów (Bjarne nie byłby sobą):
- literały tworzone przez użytkownika:
string operator "" _alamakota(const char *literal_string);
// (...)
string some_variable = 1234_alamakota;
VI. Dla tych których z nami nie ma: (a szkoda...)
- nie ma z nami konceptów (które od początku były ogłaszane jako gwóźdź programu, a na końcu je wycofali...)
- nie ma z nami modułów (a szkoda, ale co tam...)
Podsumowanie:
Uff, trochę pisania (+ szukania najciekawszych dodatków) to zajęło. No więc tak, to ja podsumowałem co dostajemy. Moim zdaniem - spory krok w przód jeśli chodzi o możliwość w tym pisania kodu ogólnego przeznaczenia. A Wy co uważacie o nowych możliwościach?