C++
Lo standard ISO C ++
Ricerca…
introduzione
Nel 1998, c'è stata una prima pubblicazione del C ++ standardizzato, un linguaggio standardizzato internamente. Da quel momento, C ++ si è evoluto risultando in diversi dialetti di C ++. In questa pagina, puoi trovare una panoramica di tutti i diversi standard e le loro modifiche rispetto alla versione precedente. I dettagli su come utilizzare queste funzionalità sono descritti su pagine più specializzate.
Osservazioni
Quando viene citato C ++, spesso viene fatto riferimento allo "Standard". Ma qual è esattamente quello standard?
C ++ ha una lunga storia. Iniziato come un piccolo progetto da Bjarne Stroustrup all'interno di Bell Labs, all'inizio degli anni '90 era diventato piuttosto popolare. Molte aziende stavano creando compilatori C ++ in modo che gli utenti potessero eseguire i propri compilatori C ++ su una vasta gamma di computer. Ma per facilitare questo, tutti questi compilatori concorrenti dovrebbero condividere una singola definizione della lingua.
A quel punto, il linguaggio C era stato standardizzato con successo. Ciò significa che è stata scritta una descrizione formale della lingua. Questo è stato presentato all'americana National Standards Institute (ANSI), che ha aperto il documento per la revisione e successivamente lo ha pubblicato nel 1989. Un anno dopo, l'Organizzazione internazionale per gli standard (poiché avrebbe sigle diverse in diverse lingue, ha scelto una forma , ISO, derivato dall'isos greco, che significa uguale) ha adottato lo standard americano come standard internazionale.
Per C ++, è stato chiaro fin dall'inizio che c'era un interesse internazionale. È stato avviato un gruppo di lavoro all'interno di ISO (noto come WG21, all'interno del sottocomitato 22). Questo gruppo di lavoro ha redatto un primo standard intorno al 1995. Ma come sappiamo i programmatori, non c'è nulla di più pericoloso per una consegna pianificata rispetto alle funzionalità dell'ultimo minuto, e ciò è accaduto anche al C ++. Nel 1995, una nuova fantastica libreria denominata STL emerse, e le persone che lavoravano nel WG21 decisero di aggiungere una versione ridotta allo standard di bozza del C ++. Naturalmente, questo ha fatto perdere le scadenze e solo 3 anni dopo il documento è diventato definitivo. ISO è un'organizzazione molto formale, quindi lo standard C ++ è stato battezzato con il nome non molto commerciabile di ISO / IEC 14882. Poiché gli standard possono essere aggiornati, questa versione esatta è diventata nota come 14882: 1998.
E infatti c'era una richiesta per aggiornare lo standard. Lo standard è un documento molto spesso, che mira a descrivere esattamente come i compilatori C ++ dovrebbero funzionare. Anche una leggera ambiguità può valere la pena di essere risolta, così nel 2003 è stato rilasciato un aggiornamento come 14882: 2003. Tuttavia, questo non ha aggiunto alcuna caratteristica al C ++; le nuove funzionalità sono state programmate per il secondo aggiornamento.
Informalmente, questo secondo aggiornamento era noto come C ++ 0x, perché non era noto se questo avrebbe richiesto fino al 2008 o al 2009. Bene, anche questa versione ha avuto un leggero ritardo, motivo per cui è diventato 14882: 2011.
Fortunatamente, il WG21 ha deciso di non permettere che accadesse di nuovo. C ++ 11 è stato ben accolto e lasciato ad un rinnovato interesse per C ++. Quindi, per mantenere lo slancio, il terzo aggiornamento è passato dalla pianificazione alla pubblicazione in 3 anni, fino a diventare 14882: 2014.
Anche il lavoro non si è fermato qui. È stato proposto lo standard C ++ 17 e il lavoro per C ++ 20 è stato avviato.
Bozze di lavoro correnti
Tutti gli standard ISO pubblicati sono disponibili per la vendita dallo store ISO ( http://www.iso.org ). Le bozze di lavoro degli standard C ++ sono pubblicamente disponibili gratuitamente.
Le diverse versioni dello standard:
- Prossimi (a volte indicati come C ++ 20 o C ++ 2a): bozza di lavoro corrente ( versione HTML )
- Proposta (talvolta denominata C ++ 17 o C ++ 1z): bozza di lavoro N4659 di marzo 2017 .
- C ++ 14 (A volte indicato come C ++ 1y): bozza di lavoro di novembre 2014 N4296
- C ++ 11 (a volte indicato come C ++ 0x): bozza di lavoro N3242 di febbraio 2011
- C ++ 03
- C ++ 98
C ++ 11
Lo standard C ++ 11 è un'estensione importante dello standard C ++. Di seguito è possibile trovare una panoramica delle modifiche così come sono state raggruppate nelle FAQ di isocpp con collegamenti a documentazione più dettagliata.
Estensioni della lingua
Caratteristiche generali
- auto
- decltype
- Intervallo per la dichiarazione
- Elenchi di inizializzatori
- Sintassi e semantica di inizializzazione uniforme
- Rvalue i riferimenti e sposta la semantica
- lambda
- nox per impedire la propagazione delle eccezioni
- constexpr
- nullptr - un letterale del puntatore nullo
- Copiare e rilanciare le eccezioni
- Spazi dei nomi incorporati
- Letterali definiti dall'utente
Classi
- = predefinito e = cancella
- Controllo dello spostamento e della copia predefiniti
- Delegare i costruttori
- Inizializzatori dei membri in classe
- Costruttori ereditati
- Comandi di sostituzione: override
- Comandi di sostituzione: finale
- Operatori di conversione espliciti
Altri tipi
- classe enum
- lungo lungo - un numero intero più lungo
- Tipi interi estesi
- Sindacati generalizzati
- POD generalizzati
Modelli
- Modelli esterni
- Alias modello
- Modelli Variadic
- Tipi locali come argomenti del modello
Concorrenza
- Modello di memoria di concorrenza
- Inizializzazione e distruzione dinamiche con concurrency
- Memorizzazione locale del thread
Funzioni linguistiche varie
- Qual è il valore di __cplusplus per C ++ 11?
- Sintassi di tipo ritorno su suffisso
- Prevenire il restringimento
- Parentesi ad angolo retto
- static_assert assertion in fase di compilazione
- Letterali stringa grezzi
- attributi
- Allineamento
- Funzionalità C99
Estensioni della libreria
Generale
- unique_ptr
- shared_ptr
- weak_ptr
- Garbage collection ABI
- tuple
- Digita i tratti
- funzione e legatura
- Espressioni regolari
- Utilità temporali
- Generazione di numeri casuali
- Allocatori individuati
Contenitori e algoritmi
- Miglioramenti degli algoritmi
- Miglioramenti del contenitore
- contenitori non ordinati_ *
- std :: matrice
- forward_list
Concorrenza
- discussioni
- Esclusione reciproca
- serrature
- Variabili di condizione
- Atomics
- Futures e promesse
- async
- Abbandonare un processo
C ++ 14
Lo standard C ++ 14 viene spesso definito come un bugfix per C ++ 11. Contiene solo un elenco limitato di modifiche di cui la maggior parte sono estensioni alle nuove funzionalità in C ++ 11. Di seguito è possibile trovare una panoramica delle modifiche così come sono state raggruppate nelle FAQ di isocpp con collegamenti a documentazione più dettagliata.
Estensioni della lingua
- Letterali binari
- Deduzione del tipo di reso generalizzato
- decltype (auto)
- Cattura di lambda generalizzata
- Lambda generico
- Modelli variabili
-
constexpr
esteso - L'attributo
[[deprecated]]
- Separatori di cifre
Estensioni della libreria
- Blocco condiviso
- Valori letterali definiti dall'utente per
std::
types -
std::make_unique
- Tipo trasformazione
_t
alias - Indirizzamento di tuple per tipo (ad es.
get<string>(t)
) - Operatori operativi trasparenti (es.
greater<>(x)
) -
std::quoted
Deprecato / Rimosso
-
std::gets
stato deprecato in C ++ 11 e rimosso da C ++ 14 -
std::random_shuffle
è deprecato
C ++ 17
Lo standard C ++ 17 è completo ed è stato proposto per la standardizzazione. Nei compilatori con supporto sperimentale per queste funzionalità, viene solitamente indicato come C ++ 1z.
Estensioni della lingua
- Piega le espressioni
- dichiarando argomenti modello non di tipo con
auto
- Copia elisione garantita
- Deduzione del parametro Template per costruttori
- Attacchi strutturati
- Spazi dei nomi nidificati compatti
- Nuovi attributi:
[[fallthrough]]
,[[nodiscard]]
,[[maybe_unused]]
- Messaggio predefinito per
static_assert
- Inizializzatori in
if
eswitch
- Variabili in linea
-
if constexpr
- Garanzie di valutazione dell'ordine di espressione
- Allocazione dinamica della memoria per dati sovra allineati
Estensioni della libreria
-
std::optional
-
std::variant
-
std::string_view
-
merge()
edextract()
per contenitori associativi - Una libreria di file system con l'intestazione
<filesystem>
. - Versioni parallele della maggior parte degli algoritmi standard (nell'intestazione
<algorithm>
). - Aggiunta di funzioni matematiche speciali nell'intestazione
<cmath>
. - Spostamento dei nodi tra la mappa <>, unordered_map <>, set <> e unordered_set <>
C ++ 03
Lo standard C ++ 03 riguarda principalmente i report sui difetti dello standard C ++ 98. Oltre a questi difetti, aggiunge solo una nuova funzionalità.
Estensioni della lingua
C ++ 98
C ++ 98 è la prima versione standardizzata di C ++. Poiché è stato sviluppato come un'estensione di C, vengono aggiunte molte delle funzionalità che separano il C ++ da C.
Estensioni della lingua (rispetto a C89 / C90)
- Classi, Classi derivate, funzioni membro virtuali, funzioni membro const
- Sovraccarico delle funzioni, sovraccarico dell'operatore
- Commenti a riga singola (È stato introdotto in C-languague con lo standard C99)
- Riferimenti
- nuovo e cancella
- tipo booleano (è stato introdotto nel C-languague con lo standard C99)
- modelli
- spazi dei nomi
- eccezioni
- cast specifici
Estensioni della libreria
- La libreria di modelli standard
C ++ 20
C ++ 20 è il prossimo standard di C ++, attualmente in fase di sviluppo, basato sullo standard C ++ 17. Il suo progresso può essere monitorato sul sito Web ISO cpp ufficiale .
Le seguenti caratteristiche sono semplicemente ciò che è stato accettato per la prossima versione dello standard C ++, mirato per il 2020.
Estensioni della lingua
Nessuna estensione di lingua è stata accettata per ora.
Estensioni della libreria
Per il momento non sono state accettate estensioni di libreria.