Co to jest C++11?
12 sierpnia 2011 ISO (Międzynarodowa Organizacja Normalizacyjna) zatwierdzona nowa wersja C++, nazwana C++11. C++11 dodaje zupełnie nowy zestaw funkcji do języka C++! Korzystanie z tych nowych funkcji jest całkowicie opcjonalne, ale niewątpliwie niektóre z nich okażą się przydatne. Wszystkie poprzednie samouczki zostały zaktualizowane tak, aby były zgodne z C++ 11.
Cele i projekty C++11
Bjarne Stroustrup scharakteryzował cele C++11 w następujący sposób:
- Buduj na mocnych stronach C++ - zamiast próbować rozszerzać C++ do nowych obszarów, w których może być słabszy (np. aplikacje Windows z rozbudowanym graficznym interfejsem użytkownika), skup się na tym, aby robił to, co robi dobrze, nawet lepiej.
- Uczyń C++ łatwiejszym do nauki, używania i nauczania — zapewnij funkcjonalność, która sprawi, że język będzie bardziej spójny i łatwiejszy w użyciu.
W tym celu komitet, który stworzył ten język, starał się przestrzegać następujących ogólnych zasad:
- Utrzymuj stabilność i kompatybilność ze starszymi wersjami C++ i C, tam gdzie to możliwe. Programy, które działały w C++03, powinny ogólnie nadal działać w C++11.
- Utrzymuj liczbę rozszerzeń języka podstawowego na minimalnym poziomie i umieść większość zmian w bibliotece standardowej (cel, który nie został zbyt dobrze osiągnięty w tej wersji)
- Skoncentruj się na ulepszaniu mechanizmów abstrakcji (klas, szablonów), zamiast dodawać mechanizmy do obsługi specyficznych, wąskich sytuacji.
- Dodaj nową funkcjonalność dla obu nowicjuszy i ekspertów. Dla każdego coś dobrego!
- Zwiększ bezpieczeństwo typów, aby zapobiec niezamierzonym błędom.
- Popraw wydajność i pozwól C++ bezpośrednio współpracować ze sprzętem.
- Rozważ kwestie związane z użytecznością i ekosystemem. C++ musi dobrze współpracować z innymi narzędziami, być łatwy w użyciu i nauczaniu itp...
C++11 nie różni się zbytnio od C++03 pod względem tematycznym, ale dodał ogromną ilość nowych funkcji.
Główne nowe funkcje w C++11
Dla Twojej ciekawości, oto lista głównych funkcji dodanych przez C++11. Należy pamiętać, że ta lista nie jest wyczerpująca, ale ma raczej na celu podkreślenie niektórych kluczowych interesujących funkcji.
- auto (10.8 -- Dedukcja typu dla obiektów korzystających z auto słowo kluczowe)
- char16_t i char32_t oraz nowe literały je obsługujące (jeszcze nie ma tutoriala)
- constexpr (>5.1 -- Zmienne stałe (zwane stałymi))
- decltype (wspomniane in 16.7 — Tablice, pętle i rozwiązania w zakresie wyzwań związanych ze znakami)
- domyślny specyfikator (14.11 -- Domyślne konstruktory i domyślne argumenty)
- Delegowanie konstruktorów (14.12 -- Delegowanie konstruktorów)
- usuń specyfikator (11.4 -- Usuwanie funkcji)
- Klasy wyliczeniowe (13.6 -- Wyliczenia o ograniczonym zakresie (klasy wyliczeniowe))
- Szablony zewnętrzne (bez tutoriala) yet)
- Wyrażenia lambda (20.6 -- Wprowadzenie do lambd (funkcji anonimowych)) i przechwytywanie (>20.7 -- Lambda przechwytuje)
- long long int (4.3 -- Rozmiary obiektów i operator sizeof)
- Przenieś konstruktor i przypisanie (22.3 -- Przenieś konstruktory i przenieś przypisanie)
- Noexcept specyfikator (krótka wzmianka) in 27.4 -- Nieprzechwycone wyjątki i procedury obsługi catch-all)
- nullptr (12.8 -- Wskaźniki zerowe)
- override i specyfikatory końcowe(25.3 -- Specyfikatory override i final oraz kowariantne typy zwrotów)
- Na podstawie zakresu dla instrukcji (16.8 -- Pętle for oparte na zakresach (dla każdego))
- odniesienia do wartości r (22.2 -- Odniesienia do wartości R)
- static_assert (9.6 — Assert i static_assert)
- std::initializer_list (23.7 — std::initializer_list)
- Składnia typu zwrotu końcowego (10.8 -- Dedukcja typu dla obiektów korzystających z auto słowo kluczowe)
- Aliasy typów (10.7 -- Typedefs i aliasy typów)
- typedef może teraz pisać klasy szablonów def
- Jednolita inicjalizacja (4.1 -- Wprowadzenie do podstawowych typów danych)
- Literały zdefiniowane przez użytkownika (jeszcze nie ma tutoriala)
- Szablony wariadyczne (jeszcze nie ma tutoriala)
- Dwa >> symbole bez spacji pomiędzy nimi będą teraz poprawnie interpretowane jako zamknięcie obiektu szablonu
W standardowej bibliotece C++ dostępnych jest także wiele nowych klas.
- Lepsza obsługa wielowątkowości i lokalnego przechowywania danych wątkowo (jeszcze nie ma tutoriala)
- Tabele skrótów (jeszcze nie ma tutoriala)
- Ulepszenia w zakresie generowania liczb losowych (podstawowe omówienie w 8.14 -- Generowanie liczb losowych za pomocą Mersenne'a Twister)
- Opakowania referencyjne (25.9 -- Dzielenie obiektów)
- Wyrażenia regularne (jeszcze nie ma tutoriala)
- std::auto_ptr zostało uznane za przestarzałe (22.1 -- Wprowadzenie do inteligentnych wskaźników i semantyki ruchów)
- std::tuple (jeszcze nie ma tutoriala)
- std::unique_ptr (22.5 — std::unique_ptr)

