2011-11-27 7 views
19

Sono abbastanza sicuro di aver letto su una fonte autorevole da qualche parte (credo fosse sulle pagine WG21) che C++ 03 era non una rettifica tecnica di C++ 98 ma che era una nuova versione del Standard C++.C++ 03 è una nuova versione dello standard C++ o solo una rettifica tecnica (TC) di C++ 98?

Tuttavia, vedo solo lo switch -std=c++98 in GCC e altri compilatori e Alf P Steinbach ha fatto uno few comments suggerendo che potrebbe essere effettivamente un TC di C++ 98.

Quindi quando sto scrivendo su "C++ 03", è sufficiente menzionare C++ 98? Come una domanda correlata, è anche errato per usare il termine "C++ 03"? Perché penso che se è veramente C++ 98 TC1, allora mi sembra che non possa essere chiamato C++ 03. Proprio come non ho mai visto qualcuno scrivere C07 per la versione C99TC3.

+1

Perché questo è importante nella pratica? – Mat

+5

@ Mat voglio scrivere il testo corretto. –

+2

ISO/IEC 14882: 2003 è la seconda edizione di ISO/IEC 14882, la precedente è la 14882: 1998. Entrambi sono pubblicati, approvati ANSI, standard. Secondo l'anticipazione del 2003: "Questa seconda edizione annulla e sostituisce la prima edizione ...". – Mat

risposta

7

Sì e no.

C++ 03 (ISO C++ 14882: 2003) è uno standard a sé stante, ed è anche "solo" TC1 poiché è solo C++ 98 modificato con una serie di correzioni.

Si può dire che C++ 03 è ciò che C++ 98 doveva essere, la formulazione effettiva di C++ 98 revisionata per far dire ciò che intendeva dire.

In the committee's own words:

“ La prima edizione della norma ISO/IEC 14882 è stato pubblicato nel 1998. Una rettifica tecnica è stato approvato nel 2003,. e lo standard è stato nuovamente pubblicato come edizione del 2003. ”

Il periodo estraneo in esso è appena citato letteralmente.

Nelle parole di Wikipedia (che non è un'autorità, ma deve essere fissato se ’ s sbagliato):

“ per alcuni anni dopo il rilascio ufficiale dello standard, il comitato elaborato rapporti difetti , e pubblicato una versione corretta del C++ standard ISO/IEC 14882: 2003, nel 2003. ”

Si potrebbe sostenere, tuttavia, che valore di inizializzazione era una cosa nuova e non solo un cor rezione. E si potrebbe sostenere che la rettifica tecnica stessa consistesse solo delle correzioni, mentre lo standard modificato con quelle correzioni è una cosa diversa, un nuovo standard. Entrambi questi punti di vista hanno senso contestualmente, a mio avviso, anche se non come affermazioni indipendenti dal contesto.

+0

Quindi il comitato dice che * loro * l'hanno approvato come TC ma l'iso ha fatto un nuovo standard non TC fuori di esso? –

+0

@Johannes: no, non dicono "non-TC". C++ 03 è, nelle parole della quarta di copertina della versione dead tree, "lo standard internazionale C++ completo che incorpora la rettifica tecnica 1/Questo è tecnicamente BS ISO/IEC 14882: 2003 (seconda edizione) come approvato da tutti organismi di standard nazionali (come ANSI). È l'unica versione rilegata disponibile dello standard. " Non sono sicuro di cosa significhi la BS in là, comunque. –

+0

@ AlfP.Steinbach: British Standard. Il BSi dove l'unico organismo di standard per pubblicare un'edizione dead tree associata AFAIK. –

2

È uno standard completamente nuovo. Credo che sia iniziato come come un semplice TC, motivo per cui si verifica la confusione, ed è sicuramente solo una versione di bugfix. Tuttavia, ci sono modifiche e vale la pena sapere se stai parlando di 98 o 03.

+1

"Tuttavia, c'erano dei cambiamenti e vale la pena sapere se stai parlando di 98 o 03.": come? – akappa

+1

@akappa: 'std :: vector' richiede solo che gli elementi siano contigui a partire da 03, ad esempio. Non sono d'accordo, ma importa molto. Chiunque si preoccupi di quale fosse il comportamento di C++ 98 sarà già in grado di sapere che dovrebbero specificarlo. Qualcuno che sta solo chiedendo di "C++" è probabilmente alla ricerca di una risposta pratica, e quindi vuole conoscere il comportamento dello standard attuale e ciò che il suo compilatore supporterà. Dato che ora ci troviamo in C++ 11, C++ 98 è effettivamente irrilevante per tali domande. – GManNickG

+1

@GManNickG la domanda è esplicitamente rivolta a C++ 03 vs C++ 98, non solo a "C++". La distinzione è tutt'altro che irrilevante - il software legacy yadda yadda. –