C++
Standard ISO C ++
Szukaj…
Wprowadzenie
W 1998 r. Opublikowano pierwszą publikację standardu, dzięki której C ++ stał się wewnętrznie znormalizowanym językiem. Od tego czasu C ++ ewoluował, powodując różne dialekty C ++. Na tej stronie można znaleźć przegląd wszystkich różnych standardów i ich zmian w porównaniu do poprzedniej wersji. Szczegółowe informacje na temat korzystania z tych funkcji opisano na bardziej wyspecjalizowanych stronach.
Uwagi
Kiedy wspomina się o C ++, często pojawia się odniesienie do „standardu”. Ale czym dokładnie jest ten standard?
C ++ ma długą historię. Rozpoczęty jako mały projekt Bjarne Stroustrup w Bell Labs, na początku lat 90. stał się dość popularny. Wiele firm tworzyło kompilatory C ++, aby użytkownicy mogli uruchamiać swoje kompilatory C ++ na wielu komputerach. Ale aby to ułatwić, wszystkie te konkurencyjne kompilatory powinny mieć jedną definicję języka.
W tym momencie język C został pomyślnie ustandaryzowany. Oznacza to, że napisano formalny opis języka. Zostało to przesłane do American National Standards Institute (ANSI), który otworzył dokument do przeglądu, a następnie opublikował go w 1989 roku. Rok później Międzynarodowa Organizacja Normalizacyjna (ponieważ miałaby różne akronimy w różnych językach, wybrała jedną formę , ISO, wywodzące się z greckiego ISO, co oznacza równe.) Przyjęła normę amerykańską jako normę międzynarodową.
W przypadku C ++ od samego początku było jasne, że istnieje zainteresowanie międzynarodowe. Rozpoczęto grupę roboczą w ramach ISO (znaną jako WG21, w ramach Podkomitetu 22). Ta grupa robocza opracowała pierwszy standard około 1995 roku. Ale, jak wiemy, programiści wiemy, że nie ma nic bardziej niebezpiecznego dla planowanej dostawy niż funkcje z ostatniej chwili, podobnie jak w przypadku C ++. W 1995 r. Pojawiła się nowa, fajna biblioteka o nazwie STL, a ludzie pracujący w WG21 postanowili dodać uproszczoną wersję do standardu wersji roboczej C ++. Oczywiście spowodowało to przekroczenie terminów i dopiero 3 lata później dokument stał się ostateczny. ISO jest bardzo formalną organizacją, dlatego Standard C ++ został ochrzczony niezbyt zbywalną nazwą ISO / IEC 14882. Ponieważ standardy można aktualizować, ta dokładna wersja stała się znana jako 14882: 1998.
I rzeczywiście było zapotrzebowanie na aktualizację Standardu. Standard jest bardzo grubym dokumentem, którego celem jest dokładne opisanie, jak powinny działać kompilatory C ++. Nawet niewielka dwuznaczność może być warta naprawienia, więc do 2003 roku aktualizacja została wydana jako 14882: 2003. Nie dodało to jednak żadnej funkcji do C ++; nowe funkcje zaplanowano na drugą aktualizację.
Nieoficjalnie ta druga aktualizacja była znana jako C ++ 0x, ponieważ nie wiadomo było, czy potrwa to do 2008 czy 2009 roku. Cóż - ta wersja również uległa niewielkiemu opóźnieniu, dlatego stała się 14882: 2011.
Na szczęście WG21 postanowił nie dopuścić do tego. C ++ 11 został dobrze przyjęty i ponownie zainteresował się C ++. Tak więc, aby utrzymać tempo, trzecia aktualizacja przeszła od planowania do opublikowania za 3 lata, aby stać się 14882: 2014.
Praca też się nie skończyła. Zaproponowano standard C ++ 17 i rozpoczęto prace nad C ++ 20.
Aktualne wersje robocze
Wszystkie opublikowane normy ISO są dostępne do sprzedaży w sklepie ISO ( http://www.iso.org ). Robocze wersje standardów C ++ są jednak publicznie dostępne za darmo.
Różne wersje standardu:
- Nadchodzące (czasami nazywane C ++ 20 lub C ++ 2a): Bieżąca wersja robocza ( wersja HTML )
- Proponowany (czasami nazywany C ++ 17 lub C ++ 1z): projekt roboczy N4659 z marca 2017 r .
- C ++ 14 (czasami nazywany C ++ 1y): projekt roboczy N4296 z listopada 2014 r
- C ++ 11 (czasami nazywany C ++ 0x): robocza wersja robocza N3242 z lutego 2011 r
- C ++ 03
- C ++ 98
C ++ 11
Standard C ++ 11 jest głównym rozszerzeniem standardu C ++. Poniżej znajduje się przegląd zmian, które zostały pogrupowane w FAQ Isocpp wraz z linkami do bardziej szczegółowej dokumentacji.
Rozszerzenia językowe
Główne cechy
- automatyczny
- decltype
- Oświadczenie o zakresie
- Listy inicjalizujące
- Jednolita składnia i semantyka inicjalizacji
- Odniesienia do wartości i semantyka przenoszenia
- Lambdas
- noexcept, aby zapobiec propagacji wyjątków
- constexpr
- nullptr - literał zerowego wskaźnika
- Kopiowanie i ponowne zgłaszanie wyjątków
- Wbudowane przestrzenie nazw
- Literały zdefiniowane przez użytkownika
Klasy
- = domyślne i = usuń
- Kontrola domyślnego przenoszenia i kopiowania
- Delegowanie konstruktorów
- Inicjatory elementów w klasie
- Dziedziczone konstruktory
- Zastąp kontrole: zastąpienie
- Zastąp kontrole: końcowe
- Jawne operatory konwersji
Inne rodzaje
- klasa enum
- long long - dłuższa liczba całkowita
- Rozszerzone typy liczb całkowitych
- Uogólnione związki zawodowe
- Uogólnione POD
Szablony
- Szablony zewnętrzne
- Aliasy szablonów
- Szablony Variadic
- Typy lokalne jako argumenty szablonu
Konkurencja
- Model pamięci współbieżności
- Dynamiczna inicjalizacja i niszczenie przy jednoczesnej zgodności
- Magazyn lokalny wątków
Różne funkcje językowe
- Jaka jest wartość __cplusplus dla C ++ 11?
- Składnia typu zwracanego sufiksu
- Zapobieganie zwężeniu
- Wsporniki kątowe
- asercje static_assert w czasie kompilacji
- Surowe literały łańcuchowe
- Atrybuty
- Wyrównanie
- Funkcje C99
Rozszerzenia biblioteki
Generał
- Unique_ptr
- shared_ptr
- słaby_ptr
- Śmieciarka ABI
- krotka
- Wpisz cechy
- funkcja i powiązanie
- Wyrażenia regularne
- Narzędzia czasu
- Generowanie liczb losowych
- Przydziały z zakresem
Kontenery i algorytmy
- Ulepszenia algorytmów
- Ulepszenia kontenerów
- nieuporządkowane_ * kontenery
- std :: array
- forward_list
Konkurencja
- Wątki
- Wzajemne wykluczenie
- Zamki
- Zmienne warunkowe
- Atomics
- Futures i obietnice
- asynchronizacja
- Porzucenie procesu
C ++ 14
Standard C ++ 14 jest często określany jako poprawka błędów dla C ++ 11. Zawiera tylko ograniczoną listę zmian, z których większość to rozszerzenia nowych funkcji w C ++ 11. Poniżej znajduje się przegląd zmian, które zostały pogrupowane w FAQ Isocpp wraz z linkami do bardziej szczegółowej dokumentacji.
Rozszerzenia językowe
- Literały binarne
- Uogólnione odliczenie typu zwrotu
- decltype (auto)
- Uogólnione wychwyty lambda
- Ogólne lambdas
- Zmienne szablony
- Rozszerzony
constexpr
- Atrybut
[[deprecated]]
- Separatory cyfr
Rozszerzenia biblioteki
- Wspólne blokowanie
- Zdefiniowane przez użytkownika literały dla
std::
types -
std::make_unique
- Typ transformacji
_t
aliasy - Adresowanie krotek według typu (np.
get<string>(t)
) - Przezroczyste funkcje operatora (np.
greater<>(x)
) -
std::quoted
Przestarzałe / usunięte
-
std::gets
jest przestarzałe w C ++ 11 i usunięte z C ++ 14 -
std::random_shuffle
jest przestarzałe
C ++ 17
Standard C ++ 17 jest kompletny i został zaproponowany do standaryzacji. W kompilatorach z eksperymentalnym wsparciem dla tych funkcji jest zwykle określany jako C ++ 1z.
Rozszerzenia językowe
- Zwiń wyrażenia
- deklarowanie nietypowych argumentów szablonów za pomocą
auto
- Gwarantowana kopia kopii
- Odliczenie parametru szablonu dla konstruktorów
- Wiązania strukturalne
- Kompaktowe zagnieżdżone przestrzenie nazw
- Nowe atrybuty:
[[fallthrough]]
,[[nodiscard]]
,[[maybe_unused]]
- Domyślny komunikat dla
static_assert
- Inicjalizatory w
if
iswitch
- Zmienne wbudowane
-
if constexpr
- Gwarancje oceny kolejności wyrażeń
- Dynamiczny przydział pamięci dla nadmiernie wyrównanych danych
Rozszerzenia biblioteki
-
std::optional
-
std::variant
-
std::string_view
-
merge()
iextract()
dla kontenerów asocjacyjnych - Biblioteka systemu
<filesystem>
nagłówkiem<filesystem>
. - Równoległe wersje większości standardowych algorytmów (w nagłówku
<algorithm>
). - Dodanie matematycznych funkcji specjalnych w nagłówku
<cmath>
. - Przenoszenie węzłów między mapą <>, unordered_map <>, set <> i unordered_set <>
C ++ 03
Standard C ++ 03 dotyczy głównie raportów błędów standardu C ++ 98. Oprócz tych wad dodaje tylko jedną nową funkcję.
Rozszerzenia językowe
C ++ 98
C ++ 98 to pierwsza znormalizowana wersja C ++. Ponieważ został opracowany jako rozszerzenie do C, dodano wiele funkcji, które odróżniają C ++ od C.
Rozszerzenia językowe (w odniesieniu do C89 / C90)
- Klasy, klasy pochodne, wirtualne funkcje składowe, stałe składowe funkcje
- Przeciążenie funkcji, przeciążenie operatora
- Komentarze jednowierszowe (wprowadzono w C-languague ze standardem C99)
- Bibliografia
- nowe i usuń
- typ boolean (został wprowadzony w C-languague ze standardem C99)
- szablony
- przestrzenie nazw
- wyjątki
- określone obsady
Rozszerzenia biblioteki
- Standardowa biblioteka szablonów
C ++ 20
C ++ 20 to nadchodzący standard C ++, będący obecnie w fazie rozwoju, oparty na standardzie C ++ 17. Postępy można śledzić na oficjalnej stronie ISO cpp .
Następujące funkcje zostały po prostu zaakceptowane w następnej wersji standardu C ++, przeznaczonej na 2020 rok.
Rozszerzenia językowe
Żadne rozszerzenia językowe nie zostały na razie zaakceptowane.
Rozszerzenia biblioteki
Żadne rozszerzenia bibliotek nie zostały na razie zaakceptowane.