C++
ISO C ++ -standarden
Sök…
Introduktion
1998 var det en första publikation av standarden som gjorde C ++ till ett internt standardiserat språk. Från den tiden har C ++ utvecklats vilket resulterat i olika dialekter av C ++. På den här sidan kan du hitta en översikt över alla olika standarder och deras förändringar jämfört med föregående version. Detaljerna för hur du använder dessa funktioner beskrivs på mer specialiserade sidor.
Anmärkningar
När C ++ nämns, hänvisas ofta till "standarden". Men vad är exakt den standarden?
C ++ har en lång historia. Började som ett litet projekt av Bjarne Stroustrup inom Bell Labs, i början av 90-talet hade det blivit ganska populärt. Flera företag skapade C ++ - kompilatorer så att användare kunde köra sina C ++ - kompilatorer på ett stort antal datorer. Men för att underlätta detta bör alla dessa konkurrerande kompilatorer ha en enda definition av språket.
Vid den tiden hade C-språket framgångsrikt standardiserats. Detta innebär att en formell beskrivning av språket skrevs. Detta överlämnades till American National Standards Institute (ANSI), som öppnade dokumentet för granskning och publicerade det därefter 1989. Ett år senare valde International Organization for Standards (Eftersom det skulle ha olika akronymer på olika språk valde de en form , ISO, härrörande från grekiska isos, vilket betyder lika.) Antog den amerikanska standarden som en internationell standard.
För C ++ var det från början tydligt att det fanns ett internationellt intresse. En arbetsgrupp inom ISO startades (känd som WG21, inom underkommittén 22). Denna arbetsgrupp utarbetade en första standard omkring 1995. Men som vi programmerare vet är det inget farligare för en planerad leverans än sista minuten-funktioner, och det hände också med C ++. 1995 dök upp ett coolt nytt bibliotek med namnet STL, och de som arbetade i WG21 beslutade att lägga till en slimmad version till C ++ -utkastet. Naturligtvis orsakade detta tidsfristerna och bara tre år senare blev dokumentet slutgiltigt. ISO är en mycket formell organisation, så C ++ -standarden döptes med det inte särskilt säljbara namnet ISO / IEC 14882. Eftersom standarder kan uppdateras, blev denna exakta version känd som 14882: 1998.
Och det fanns verkligen ett krav på att uppdatera standarden. Standarden är ett mycket tjockt dokument som syftar till att exakt beskriva hur C ++ -kompilatorer ska fungera. Till och med en liten tvetydighet kan vara värt att fixa, så 2003 släpptes en uppdatering som 14882: 2003. Men detta har inte lagt till någon funktion i C ++; de nya funktionerna planerades för den andra uppdateringen.
Informellt sett var den andra uppdateringen känd som C ++ 0x, eftersom det inte var känt om detta skulle ta förrän 2008 eller 2009. Tja - den versionen fick också en liten försening, varför den blev 14882: 2011.
Lyckligtvis beslutade WG21 att inte låta det hända igen. C ++ 11 var väl mottagen och uthyrda till ett förnyat intresse för C ++. Så för att hålla fart, gick den tredje uppdateringen från planering till publicering på tre år, till 14882: 2014.
Arbetet slutade inte heller där. C ++ 17-standarden har föreslagits och arbetet för C ++ 20 har påbörjats.
Nuvarande arbetsutkast
Alla publicerade ISO-standarder är tillgängliga för försäljning från ISO-butiken ( http://www.iso.org ). Arbetsutkasten till C ++ - standarderna är dock offentligt tillgängliga gratis.
De olika versionerna av standarden:
- Kommande (kallas ibland C ++ 20 eller C ++ 2a): Nuvarande arbetsutkast ( HTML-version )
- Föreslagen (kallas ibland C ++ 17 eller C ++ 1z): mars 2017 arbetsutkast N4659 .
- C ++ 14 (kallas ibland C ++ 1y): november 2014 arbetsutkast N4296
- C ++ 11 (kallas ibland C ++ 0x): februari 2011 arbetsutkast N3242
- C ++ 03
- C ++ 98
C ++ 11
C ++ 11-standarden är en viktig förlängning av C ++ -standarden. Nedan hittar du en översikt över förändringarna eftersom de har grupperats på isocpp FAQ med länkar till mer detaljerad dokumentation.
Språkförlängningar
Allmänna funktioner
- bil
- decltype
- Räckvidd för uttalande
- Initialiseringslistor
- Uniform initialiseringssyntax och semantik
- Värdera referenser och flytta semantik
- lambdas
- noe för att förhindra spridning av undantag
- constexpr
- nullptr - en bokstav för nollpekare
- Kopiera och återupptag undantag
- Inline namnutrymmen
- Användardefinierade bokstäver
Klasser
- = standard och = radera
- Kontroll av standardflyttning och kopiering
- Delegera konstruktörer
- Initierare i klassens medlemmar
- Arvade konstruktörer
- Överstyr kontroller: åsidosätta
- Åsidosätt kontroller: slutlig
- Explicit konverteringsoperatörer
Andra typer
- enum klass
- lång lång - ett längre heltal
- Utökade heltalstyper
- Generaliserade fackföreningar
- Generaliserade POD: er
mallar
- Externa mallar
- Mallalias
- Variadiska mallar
- Lokala typer som mallargument
samtidighet
- Modell för samtidighetsminne
- Dynamisk initialisering och förstörelse med samtidighet
- Tråd-lokal lagring
Diverse språkfunktioner
- Vad är värdet på __cplusplus för C ++ 11?
- Syntax av eftertyp av returtyp
- Förhindrar förträngning
- Rätt vinklar
- static_assert kompileringstidsanspråk
- Rå strängbokstäver
- attribut
- Inriktning
- C99 funktioner
Bibliotekstillägg
Allmän
- unique_ptr
- shared_ptr
- weak_ptr
- Avfallssamling ABI
- tupel
- Skriv drag
- fungera och binda
- Vanliga uttryck
- Tidsverktyg
- Slumpmässig nummergenerering
- Scoped tilldelare
Behållare och algoritmer
- Algoritmer förbättringar
- Behållare förbättringar
- unordered_ * containrar
- std :: array
- forward_list
samtidighet
- Trådar
- Ömsesidig uteslutning
- lås
- Tillståndsvariabler
- Atomics
- Framtider och löften
- async
- Att överge en process
C ++ 14
C ++ 14-standarden benämns ofta en bugfix för C ++ 11. Den innehåller bara en begränsad lista över förändringar, varav de flesta är tillägg till de nya funktionerna i C ++ 11. Nedan hittar du en översikt över förändringarna eftersom de har grupperats på isocpp FAQ med länkar till mer detaljerad dokumentation.
Språkförlängningar
- Binära bokstäver
- Allmänt avdrag för returtyp
- decltype (auto)
- Generaliserade lambda-fångar
- Generiska lambdas
- Variabla mallar
- Utökad
constexpr
- Attributet
[[deprecated]]
- Sifferavskiljare
Bibliotekstillägg
- Delad låsning
- Användardefinierade bokstäver för
std::
-typer -
std::make_unique
- Skriv omvandling
_t
alias - Adressera tuples efter typ (t.ex.
get<string>(t)
) - Transparenta operatörsfunktorer (t.ex.
greater<>(x)
) -
std::quoted
Avskrivs / tas bort
-
std::gets
avskrivs i C ++ 11 och togs bort från C ++ 14 -
std::random_shuffle
C ++ 17
C ++ 17-standarden är fullständig och har föreslagits för standardisering. I kompilatorer med experimentellt stöd för dessa funktioner benämns det vanligtvis C ++ 1z.
Språkförlängningar
- Vik uttryck
- deklarera icke-typmallargument med
auto
- Garanterad kopia elision
- Mallparametersavdrag för konstruktörer
- Strukturerade bindningar
- Kompakta kapslade namnutrymmen
- Nya attribut:
[[fallthrough]]
,[[nodiscard]]
,[[maybe_unused]]
- Standardmeddelande för
static_assert
- Initierare i
if
ochswitch
- Inlinevariabler
-
if constexpr
- Garantier för utvärdering av ordning för uttryck
- Dynamisk minnesallokering för överinriktad data
Bibliotekstillägg
-
std::optional
-
std::variant
-
std::string_view
-
merge()
ochextract()
för associerande behållare - Ett filsystembibliotek med
<filesystem>
-huvudet . - Parallella versioner av de flesta av standardalgoritmerna (i
<algorithm>
rubriken ). - Tillägg av matematiska specialfunktioner i
<cmath>
. - Flytta noder mellan karta <>, oordnad_mapp <>, inställning <> och oordnad_set <>
C ++ 03
C ++ 03-standarden adresserar huvudsakligen felrapporter av C ++ 98-standarden. Bortsett från dessa defekter lägger den bara till en ny funktion.
Språkförlängningar
C ++ 98
C ++ 98 är den första standardiserade versionen av C ++. Eftersom det utvecklades som en förlängning till C läggs många av de funktioner som skiljer C ++ från C till.
Språkförlängningar (avseende C89 / C90)
- Klasser, Deriverade klasser, virtuella medlemsfunktioner, const medlemsfunktioner
- Funktionsöverbelastning, överbelastning av operatören
- Kommentarer med en rad (har införts i C-språket med C99-standard)
- referenser
- nytt och ta bort
- boolesk typ (har introducerats i C-languague med C99-standard)
- mallar
- namnutrymmen
- undantag
- specifika kast
Bibliotekstillägg
- Standardmallbiblioteket
C ++ 20
C ++ 20 är den kommande standarden för C ++, för närvarande under utveckling, baserad på C ++ 17-standarden. Dess framsteg kan spåras på den officiella ISO cpp-webbplatsen .
Följande funktioner är helt enkelt vad som har accepterats för nästa utgåva av C ++ -standarden, riktad för 2020.
Språkförlängningar
Inga språkförlängningar har accepterats för tillfället.
Bibliotekstillägg
Inga bibliotekstillägg har accepterats för tillfället.