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:

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

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

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

Rozszerzenia biblioteki

Przestarzałe / usunięte

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

Rozszerzenia biblioteki

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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow