C++
De ISO C ++ standaard
Zoeken…
Invoering
In 1998 was er een eerste publicatie van de standaard waardoor C ++ een intern gestandaardiseerde taal werd. Vanaf dat moment is C ++ geëvolueerd, wat heeft geleid tot verschillende dialecten van C ++. Op deze pagina vindt u een overzicht van alle verschillende normen en hun wijzigingen ten opzichte van de vorige versie. De details over het gebruik van deze functies worden beschreven op meer gespecialiseerde pagina's.
Opmerkingen
Wanneer C ++ wordt genoemd, wordt vaak verwezen naar "de standaard". Maar wat is precies die norm?
C ++ heeft een lange geschiedenis. Begonnen als een klein project van Bjarne Stroustrup binnen Bell Labs, was het begin jaren 90 behoorlijk populair geworden. Meerdere bedrijven maakten C ++ -compilers zodat gebruikers hun C ++ -compilers op een breed scala van computers konden uitvoeren. Maar om dit te vergemakkelijken, zouden al deze concurrerende compilers een enkele definitie van de taal moeten delen.
Op dat moment was de C-taal met succes gestandaardiseerd. Dit betekent dat er een formele beschrijving van de taal is geschreven. Dit werd ingediend bij het American National Standards Institute (ANSI), dat het document ter inzage opende en vervolgens in 1989 publiceerde. Een jaar later, de International Organisation for Standards (omdat het verschillende acroniemen in verschillende talen zou hebben, kozen ze één vorm , ISO, afgeleid van het Griekse ISO, wat gelijk betekent.) Heeft de Amerikaanse norm als internationale norm overgenomen.
Voor C ++ was vanaf het begin duidelijk dat er een internationaal belang was. Een werkgroep binnen ISO werd gestart (bekend als WG21, binnen SubCommittee 22). Deze werkgroep heeft rond 1995 een eerste standaard opgesteld. Maar zoals programmeurs weten, is er niets gevaarlijkers voor een geplande levering dan last-minute functies, en dat gebeurde ook met C ++. In 1995 dook een coole nieuwe bibliotheek op met de naam STL, en de mensen die in WG21 werkten, besloten een afgeslankte versie toe te voegen aan de C ++ conceptstandaard. Dit zorgde er natuurlijk voor dat de deadlines werden gemist en slechts 3 jaar later werd het document definitief. ISO is een zeer formele organisatie, dus de C ++ Standard werd gedoopt met de niet erg verhandelbare naam ISO / IEC 14882. Omdat standaarden kunnen worden bijgewerkt, werd deze exacte versie bekend als 14882: 1998.
En inderdaad was er een vraag om de standaard bij te werken. De standaard is een heel dik document, dat bedoeld is om precies te beschrijven hoe C ++ -compilers zouden moeten werken. Zelfs een kleine dubbelzinnigheid kan het oplossen waard zijn, dus in 2003 werd een update uitgebracht als 14882: 2003. Dit heeft echter geen enkele functie toegevoegd aan C ++; de nieuwe functies waren gepland voor de tweede update.
Informeel stond deze tweede update bekend als C ++ 0x, omdat niet bekend was of dit tot 2008 of 2009 zou duren. Nou - die versie kreeg ook een kleine vertraging, daarom werd het 14882: 2011.
Gelukkig besloot WG21 dat niet meer te laten gebeuren. C ++ 11 werd goed ontvangen en verhuurd aan een hernieuwde interesse in C ++. Dus, om het momentum te behouden, ging de derde update van planning naar publicatie in 3 jaar, tot 14882: 2014.
Het werk stopte daar ook niet. De C ++ 17-standaard is voorgesteld en het werk voor C ++ 20 is gestart.
Huidige werkconcepten
Alle gepubliceerde ISO-normen zijn te koop in de ISO-winkel ( http://www.iso.org ). De werkversies van de C ++ -standaarden zijn echter gratis beschikbaar voor het publiek.
De verschillende versies van de standaard:
- Aankomend (soms aangeduid als C ++ 20 of C ++ 2a): huidig werkontwerp ( HTML-versie )
- Voorgesteld (soms aangeduid als C ++ 17 of C ++ 1z): werkontwerp N4659 maart 2017 .
- C ++ 14 (soms aangeduid als C ++ 1y): werkontwerp N4296 van november 2014
- C ++ 11 (soms aangeduid als C ++ 0x): werkontwerp N3242 van februari 2011
- C ++ 03
- C ++ 98
C ++ 11
De C ++ 11-standaard is een belangrijke uitbreiding van de C ++ -standaard. Hieronder vindt u een overzicht van de wijzigingen zoals deze zijn gegroepeerd in de veelgestelde vragen over isocpp met links naar meer gedetailleerde documentatie.
Taalextensies
Algemene kenmerken
- auto
- decltype
- Bereik-voor statement
- Initialisatielijsten
- Uniforme initialisatiesyntaxis en semantiek
- Waardeer referenties en verplaats semantiek
- lambda
- geen uitzondering om propagatie van uitzonderingen te voorkomen
- constexpr
- nullptr - een nulwijzer letterlijk
- Uitzonderingen kopiëren en opnieuw uitwerken
- Inline naamruimten
- Door de gebruiker gedefinieerde literals
Klassen
- = standaard en = verwijderen
- Controle van standaard verplaatsen en kopiëren
- Constructeurs delegeren
- In-class ledeninitializers
- Overgenomen constructeurs
- Bedieningselementen opheffen: negeren
- Controles opheffen: definitief
- Expliciete conversie-operators
Andere types
- enum-klasse
- lang lang - een langer geheel getal
- Uitgebreide integer typen
- Algemene vakbonden
- Gegeneraliseerde POD's
Sjablonen
- Externe sjablonen
- Sjabloonaliassen
- Variadic sjablonen
- Lokale typen als sjabloonargumenten
samenloop
- Concurrency-geheugenmodel
- Dynamische initialisatie en vernietiging met gelijktijdigheid
- Thread-lokale opslag
Diverse taalfuncties
- Wat is de waarde van __cplusplus voor C ++ 11?
- Achtervoegsel type syntaxis
- Vernauwing voorkomen
- Haakse beugels
- static_assert compilatiebeweringen
- Raw string literals
- attributen
- opstelling
- C99 functies
Bibliotheekextensies
Algemeen
- unique_ptr
- shared_ptr
- weak_ptr
- Garbage collection ABI
- tuple
- Typ kenmerken
- functie en binden
- Normale uitdrukkingen
- Tijd nutsbedrijven
- Willekeurige nummer generatie
- Scoped-allocators
Containers en algoritmen
- Algoritmen verbeteringen
- Container verbeteringen
- unordered_ * containers
- std :: matrix
- forward_list
samenloop
- threads
- Wederzijdse uitsluiting
- sloten
- Voorwaarde variabelen
- Kernfysica
- Futures en beloften
- async
- Een proces verlaten
C ++ 14
De C ++ 14-standaard wordt vaak een bugfix voor C ++ 11 genoemd. Het bevat slechts een beperkte lijst met wijzigingen, waarvan de meeste extensies zijn voor de nieuwe functies in C ++ 11. Hieronder vindt u een overzicht van de wijzigingen zoals deze zijn gegroepeerd in de veelgestelde vragen over isocpp met links naar meer gedetailleerde documentatie.
Taalextensies
- Binaire literals
- Algemene aftrek van het retourtype
- decltype (auto)
- Gegeneraliseerde lambda-vangsten
- Generieke lambdas
- Variabele sjablonen
- Uitgebreide
constexpr
- Het kenmerk
[[deprecated]]
- Cijfer scheidingstekens
Bibliotheekextensies
- Gedeelde vergrendeling
- Door de gebruiker gedefinieerde lettertypen voor
std::
types -
std::make_unique
- Typ transformatie
_t
aliassen - Tupels adresseren op type (bijv.
get<string>(t)
ophalen ) - Transparante operatorfuncties (bijv.
greater<>(x)
) -
std::quoted
Verouderd / verwijderd
-
std::gets
werd afgeschaft in C ++ 11 en verwijderd uit C ++ 14 -
std::random_shuffle
is verouderd
C ++ 17
De C ++ 17-standaard is compleet en is voorgesteld voor standaardisatie. In compilers met experimentele ondersteuning voor deze functies wordt dit meestal C ++ 1z genoemd.
Taalextensies
- Vouw uitdrukkingen
- niet-type sjabloonargumenten declareren met
auto
- Gegarandeerde kopie-verwijdering
- Sjabloonparameteraftrek voor constructeurs
- Gestructureerde bindingen
- Compacte geneste naamruimten
- Nieuwe attributen:
[[fallthrough]]
,[[nodiscard]]
,[[maybe_unused]]
- Standaardbericht voor
static_assert
- Initializers in
if
enswitch
- Inline variabelen
-
if constexpr
- Garanties voor de volgorde van meningsuiting
- Dynamische geheugentoewijzing voor overgealigneerde gegevens
Bibliotheekextensies
-
std::optional
-
std::variant
-
std::string_view
-
merge()
enextract()
voor associatieve containers - Een bestandssysteembibliotheek met de kop
<filesystem>
. - Parallelle versies van de meeste standaardalgoritmen (in de kop
<algorithm>
). - Toevoeging van wiskundige speciale functies in de kop
<cmath>
. - Knopen verplaatsen tussen map <>, unordered_map <>, set <> en unordered_set <>
C ++ 03
De C ++ 03-standaard behandelt voornamelijk defectrapporten van de C ++ 98-norm. Afgezien van deze defecten, voegt het slechts één nieuwe functie toe.
Taalextensies
C ++ 98
C ++ 98 is de eerste gestandaardiseerde versie van C ++. Omdat het is ontwikkeld als een uitbreiding op C, zijn veel van de functies toegevoegd die C ++ onderscheiden van C.
Taalextensies (met betrekking tot C89 / C90)
- Klassen, afgeleide klassen, virtuele lidfuncties, const-lidfuncties
- Functie overbelast, operator overbelast
- Enkele regel opmerkingen (Is geïntroduceerd in de C-languague met C99 standaard)
- Referenties
- nieuw en verwijderen
- boolean type (Is geïntroduceerd in de C-languague met C99 standaard)
- Sjablonen
- namespaces
- uitzonderingen
- specifieke casts
Bibliotheekextensies
- De standaard sjabloonbibliotheek
C ++ 20
C ++ 20 is de aankomende standaard van C ++, momenteel in ontwikkeling, gebaseerd op de C ++ 17-standaard. De voortgang kan worden gevolgd op de officiële ISO cpp-website .
De volgende functies zijn gewoon wat is geaccepteerd voor de volgende release van de C ++ standaard, gericht op 2020.
Taalextensies
Er zijn momenteel geen taalextensies geaccepteerd.
Bibliotheekextensies
Er zijn momenteel geen bibliotheekextensies geaccepteerd.