C++
Der ISO-C ++ - Standard
Suche…
Einführung
1998 wurde der Standard erstmals veröffentlicht, wodurch C ++ eine intern standardisierte Sprache wurde. Seitdem hat sich C ++ entwickelt, was zu unterschiedlichen Dialekten von C ++ führte. Auf dieser Seite finden Sie eine Übersicht aller verschiedenen Standards und deren Änderungen gegenüber der Vorgängerversion. Die Details zur Verwendung dieser Funktionen werden auf spezielleren Seiten beschrieben.
Bemerkungen
Wenn C ++ erwähnt wird, wird häufig auf "den Standard" verwiesen. Aber was ist genau dieser Standard?
C ++ hat eine lange Geschichte. Begonnen als kleines Projekt von Bjarne Stroustrup in den Bell Labs, war es Anfang der 90er Jahre sehr beliebt. Mehrere Unternehmen erstellten C ++ - Compiler, sodass Benutzer ihre C ++ - Compiler auf einer Vielzahl von Computern ausführen können. Um dies zu erleichtern, sollten alle konkurrierenden Compiler eine einzige Definition der Sprache haben.
Zu diesem Zeitpunkt war die C-Sprache erfolgreich standardisiert worden. Dies bedeutet, dass eine formale Beschreibung der Sprache verfasst wurde. Dies wurde dem American National Standards Institute (ANSI) vorgelegt, das das Dokument zur Überprüfung öffnete und 1989 veröffentlichte. Ein Jahr später die International Organization for Standards (Da es verschiedene Akronyme in verschiedenen Sprachen hätte, wählten sie eine Form , ISO, abgeleitet von den griechischen isos (gleichwertig), übernahm den amerikanischen Standard als internationalen Standard.
Für C ++ war von Anfang an klar, dass ein internationales Interesse besteht. Eine Arbeitsgruppe innerhalb der ISO wurde gegründet (bekannt als WG21, innerhalb des Unterausschusses 22). Diese Arbeitsgruppe entwarf um 1995 einen ersten Standard. Aber wie wir Programmierer wissen, ist nichts für eine geplante Bereitstellung gefährlicher als die Last-Minute-Funktionen, und das geschah auch bei C ++. 1995 erschien eine coole neue Bibliothek mit dem Namen STL, und die in WG21 tätigen Personen beschlossen, den C ++ - Entwurfsstandard um eine abgespeckte Version zu erweitern. Natürlich wurden dadurch die Fristen nicht eingehalten und nur drei Jahre später wurde das Dokument endgültig. ISO ist eine sehr formale Organisation, daher wurde der C ++ - Standard mit dem nicht sehr marktfähigen Namen ISO / IEC 14882 getauft. Da Standards aktualisiert werden können, wurde diese genaue Version als 14882: 1998 bekannt.
Und in der Tat bestand die Forderung, den Standard zu aktualisieren. Der Standard ist ein sehr umfangreiches Dokument, das genau beschreibt, wie C ++ - Compiler arbeiten sollen. Selbst eine geringfügige Unklarheit kann es wert sein, korrigiert zu werden. Daher wurde bis 2003 ein Update unter der Nummer 14882: 2003 veröffentlicht. Dies fügte jedoch kein Feature zu C ++ hinzu; Die neuen Funktionen waren für das zweite Update geplant.
Informell wurde dieses zweite Update als C ++ 0x bezeichnet, da nicht bekannt war, ob dies bis 2008 oder 2009 dauern würde. Nun, diese Version wurde ebenfalls etwas verzögert, weshalb sie 14882: 2011 wurde.
Glücklicherweise entschied sich die WG21, dies nicht noch einmal passieren zu lassen. C ++ 11 wurde gut angenommen und ließ ein erneutes Interesse an C ++ erkennen. Um die Dynamik aufrechtzuerhalten, wurde das dritte Update innerhalb von 3 Jahren von der Planung zur Veröffentlichung auf 14882: 2014 geändert.
Die Arbeit hörte auch dort nicht auf. Der C ++ 17-Standard wurde vorgeschlagen und die Arbeit für C ++ 20 wurde gestartet.
Aktuelle Arbeitsentwürfe
Alle veröffentlichten ISO-Standards sind im ISO-Store ( http://www.iso.org ) erhältlich. Die Arbeitsentwürfe der C ++ - Standards sind jedoch kostenlos öffentlich verfügbar.
Die verschiedenen Versionen des Standards:
- In Kürze verfügbar (manchmal als C ++ 20 oder C ++ 2a bezeichnet): Aktueller Arbeitsentwurf ( HTML-Version )
- Vorgeschlagen (manchmal als C ++ 17 oder C ++ 1z bezeichnet): März 2017 Arbeitsentwurf N4659 .
- C ++ 14 (manchmal als C ++ 1y bezeichnet): Arbeitsentwurf N4296 vom November 2014
- C ++ 11 (manchmal als C ++ 0x bezeichnet): Arbeitsentwurf für Februar 2011 N3242
- C ++ 03
- C ++ 98
C ++ 11
Der C ++ 11-Standard ist eine wichtige Erweiterung des C ++ - Standards. Nachfolgend finden Sie eine Übersicht der Änderungen, die in den isocpp-FAQs mit Links zu detaillierterer Dokumentation zusammengefasst wurden.
Spracherweiterungen
Allgemeine Merkmale
- Auto
- decltype
- Range-for-Anweisung
- Initialisierungslisten
- Einheitliche Initialisierungssyntax und -semantik
- Referenzwerte und Verschiebungssemantik
- Lambdas
- noexcept , um die Ausbreitung von Ausnahmen zu verhindern
- constexpr
- nullptr - ein Nullzeigerliteral
- Ausnahmen kopieren und erneut werfen
- Inline-Namespaces
- Benutzerdefinierte Literale
Klassen
- = default und = löschen
- Kontrolle der Standardeinstellungen zum Verschieben und Kopieren
- Konstruktoren delegieren
- Initialisierer innerhalb der Klasse
- Geerbte Konstruktoren
- Steuerelemente überschreiben: überschreiben
- Steuerelemente überschreiben: final
- Explizite Konvertierungsoperatoren
Andere Arten
- Aufzählungsklasse
- long long - eine längere ganze Zahl
- Erweiterte Ganzzahltypen
- Generalisierte Gewerkschaften
- Generalisierte PODs
Vorlagen
- Externe Vorlagen
- Template-Aliase
- Variadische Vorlagen
- Lokale Typen als Vorlagenargumente
Parallelität
- Gleichzeitiges Speichermodell
- Dynamische Initialisierung und Zerstörung mit Parallelität
- Thread-lokaler Speicher
Verschiedene Sprachfunktionen
- Was ist der Wert von __cplusplus für C ++ 11?
- Suffix Rückgabetypsyntax
- Verengung verhindern
- Rechtwinklige Klammern
- Kompatibilitäts-Assertions von static_assert
- Rohe String-Literale
- Attribute
- Ausrichtung
- C99-Funktionen
Bibliothekserweiterungen
Allgemeines
- unique_ptr
- shared_ptr
- schwach_ptr
- Müllabfuhr ABI
- Tupel
- Eigenschaften eingeben
- Funktion und Bindung
- Reguläre Ausdrücke
- Zeit-Dienstprogramme
- Zufallszahlengenerierung
- Aufteiler für Bereiche
Container und Algorithmen
- Algorithmenverbesserungen
- Containerverbesserungen
- unordered_ * container
- std :: array
- forward_list
Parallelität
- Fäden
- Gegenseitiger Ausschluss
- Schlösser
- Bedingungsvariablen
- Atomik
- Futures und Versprechen
- asynchron
- Einen Prozess aufgeben
C ++ 14
Der C ++ 14-Standard wird häufig als Bugfix für C ++ 11 bezeichnet. Es enthält nur eine begrenzte Liste von Änderungen, von denen die meisten Erweiterungen der neuen Features in C ++ 11 sind. Nachfolgend finden Sie eine Übersicht der Änderungen, die in den isocpp-FAQs mit Links zu detaillierterer Dokumentation zusammengefasst wurden.
Spracherweiterungen
- Binäre Literale
- Generalisierter Rücknahme-Abzug
- decltype (auto)
- Generalisierte Lambda-Fänge
- Generische Lambdas
- Variable Vorlagen
- Erweiterte
constexpr
- Das Attribut
[[deprecated]]
- Zifferntrennzeichen
Bibliothekserweiterungen
- Gemeinsames Sperren
- Benutzerdefinierte Literale für
std::
types -
std::make_unique
-
_t
Aliase der Transformation_t
- Adressierung von Tupeln nach Typ (z. B.
get<string>(t)
) - Transparente Operatorfunktionalitäten (z. B.
greater<>(x)
) -
std::quoted
Veraltet / Entfernt
-
std::gets
wurde in C ++ 11 veraltet und aus C ++ 14 entfernt -
std::random_shuffle
ist veraltet
C ++ 17
Der C ++ 17-Standard ist vollständig und wurde zur Standardisierung vorgeschlagen. In Compilern mit experimenteller Unterstützung für diese Features wird es normalerweise als C ++ 1z bezeichnet.
Spracherweiterungen
- Ausdrücke falten
- Nicht-Typ-Vorlagenargumente mit
auto
deklarieren - Garantierte Kopiereinstellung
- Vorlagenparameterabzug für Konstruktoren
- Strukturierte Bindungen
- Kompakte verschachtelte Namespaces
- Neue Attribute:
[[fallthrough]]
,[[nodiscard]]
,[[maybe_unused]]
- Standardnachricht für
static_assert
- Initialisierer in
if
undswitch
- Inline-Variablen
-
if constexpr
- Reihenfolge der Ausdrucksgarantien
- Dynamische Speicherzuordnung für übergeordnete Daten
Bibliothekserweiterungen
-
std::optional
-
std::variant
-
std::string_view
-
merge()
undextract()
für assoziative Container - Eine Dateisystembibliothek mit dem Header
<filesystem>
. - Parallele Versionen der meisten Standardalgorithmen (im Header
<algorithm>
). - Hinzufügen mathematischer Sonderfunktionen in der
<cmath>
. - Knoten zwischen map <>, unordered_map <>, set <> und unordered_set <> verschieben
C ++ 03
Der C ++ 03-Standard behandelt hauptsächlich Fehlerberichte des C ++ 98-Standards. Abgesehen von diesen Mängeln wird nur eine neue Funktion hinzugefügt.
Spracherweiterungen
C ++ 98
C ++ 98 ist die erste standardisierte Version von C ++. Da es als Erweiterung zu C entwickelt wurde, werden viele Features hinzugefügt, die C ++ von C unterscheiden.
Spracherweiterungen (in Bezug auf C89 / C90)
- Klassen, abgeleitete Klassen, virtuelle Memberfunktionen, const Memberfunktionen
- Funktionsüberlastung, Operatorüberlastung
- Einzeilige Kommentare (Wurde in der C-Sprache mit C99-Standard eingeführt)
- Verweise
- neu und löschen
- boolescher Typ (Wurde in der C-Sprache mit C99-Standard eingeführt)
- Vorlagen
- Namespaces
- Ausnahmen
- bestimmte Besetzungen
Bibliothekserweiterungen
- Die Standardvorlagenbibliothek
C ++ 20
C ++ 20 ist der kommende Standard von C ++, der sich derzeit in der Entwicklung befindet und auf dem C ++ 17-Standard basiert. Der Fortschritt kann auf der offiziellen ISO-CPP-Website verfolgt werden .
Die folgenden Funktionen sind einfach das, was für die nächste Version des C ++ - Standards, die für 2020 vorgesehen ist, akzeptiert wurde.
Spracherweiterungen
Bisher wurden keine Spracherweiterungen akzeptiert.
Bibliothekserweiterungen
Bisher wurden keine Bibliothekserweiterungen akzeptiert.