Quali sono i vari rami della lingua C ++ là fuori?

5

L'ultima volta che ho provato a utilizzare C ++ diversi anni fa ricordo di dover includere librerie diverse tra IDE diversi anche se stavo usando lo stesso sistema operativo, il che mi lasciava un po 'confuso riguardo al linguaggio C ++.

Esistono diverse standardizzazioni del linguaggio C ++? E se sì, quali rami della lingua esistono là fuori? La sintassi e / oi nomi delle librerie per ogni standardizzazione differiscono tra i sistemi operativi? Inoltre, qual è la standardizzazione primaria utilizzata al giorno d'oggi?

    
posta Ein Doofus 24.08.2012 - 14:07
fonte

4 risposte

4

Il posto più grande che ho visto è C ++ 11, che includeva la maggior parte del Rapporto tecnico 1 biblioteche. Ad esempio, per accedere alla tabella hash ( unordered_map ), era necessario #include <tr1/unordered_map> ed era nello spazio dei nomi std::tr1 . Ora, lasci la tr1 fuori da entrambi.

Lo standard C ++ è stato rivisto più volte, il più recente è C ++ 11, C ++ 03 e C ++ 98. Tuttavia, pochi compilatori implementano le specifiche complete in un'unica versione, quindi versioni diverse di compilatori diversi supportano parti diverse delle specifiche. Inoltre, poiché la specifica è scritta in un linguaggio naturale (inglese), presenta delle ambiguità e i casi d'angolo possono essere gestiti in modo diverso da compilatori diversi.

Allo stesso modo, in un'implementazione della libreria standard, #include <vector> può automaticamente #include <algorithm> , mentre in un altro, non può. Pertanto, in un'implementazione, potresti riuscire a utilizzare i metodi in algorithm senza includerlo, anche se il tuo programma non è tecnicamente conforme alle specifiche C ++.

Per quanto riguarda la standardizzazione primaria, se stai iniziando un progetto da zero ora, dovresti usare C ++ 11 e l'ultima versione stabile del tuo compilatore preferito. Non tutte le funzionalità sono completamente implementate da tutti i compilatori, ma ad es. dovresti usare unique_ptr invece di auto_ptr , usare (semplice) lambdas e la parola chiave auto dove migliora la leggibilità.

    
risposta data 24.08.2012 - 14:10
fonte
1

Non ci sono rami effettivi della lingua. Tuttavia, la libreria standard del linguaggio è molto minimalista rispetto a molti altri linguaggi popolari come C #, Java o Python. Ciò potrebbe benissimo dare l'impressione che il linguaggio sia ramificato, o addirittura caotico, perché per utilizzare funzionalità di livello superiore trovate in altri linguaggi come thread (*) o servizi HTTP, il programmatore deve fare affidamento su librerie esterne che non sono trovato nella libreria standard. In quanto tale, il programmatore dipende direttamente da fornitori esterni, piuttosto che limitarsi semplicemente a ciò che la lingua fornisce per impostazione predefinita.

(*) C ++ 11 include funzionalità di thread standard, in quanto spesso non c'è alcun motivo assoluto per fare affidamento su una libreria esterna come Boost per i thread.

    
risposta data 24.08.2012 - 15:56
fonte
0

La risposta più corretta, per quanto ne so, per la tua domanda è: nessuna.

Poiché una lingua è una lingua con o senza intestazioni o alcune librerie, puoi vedere le librerie più comuni come libreria standard o boost library come prodotti di base nel tuo flusso di lavoro ma il linguaggio stesso non li richiede; tutto quello che devi codificare è un editor di testo e un compilatore.

Se puoi essere più specifico su questo, sarebbe utile rispondere in un modo migliore ma in generale dipende da:

  • quali tecnologie vuoi utilizzare nel tuo progetto (in pratica quali librerie)
  • che tipo di build vuoi produrre e quale compilatore stai usando, ad esempio alcuni compilatori e librerie offrono macro specifiche

Riguardo le ultime versioni della lingua, il C ++ 11, era una bozza per qualcosa come 1 anno ed è stato recentemente approvato, alcuni libri saranno presto pubblicati su questo argomento, ma non penso che vedremo C ++ 11 in un ambiente produttivo presto; il moderno C ++ è più orientato alla meta-programmazione, una caratteristica come la possibilità di usare i modelli, è molto popolare in questi giorni e per darvi un'idea i modelli sono stati introdotti alla fine degli anni '90. L'adozione su larga scala è lenta, puoi studiare da un libro o una risorsa di 5-10 anni fa e avere buone possibilità di diventare uno sviluppatore moderno.

    
risposta data 24.08.2012 - 14:46
fonte
0

Puoi leggere su c ++ in wiki c ++ .

Are there different standardizations of the C++ language? And if so, what branches of the language exist out there?

Ci sono 3 versioni principali di c ++: c ++ 11 , c++03 e c + +98 .

c ++ 11 è la versione più recente e ci sono ancora funzioni non supportate nei compilatori.

Is the syntax and/or library names for each standardization different between operating systems?

No, c ++ ha la stessa sintassi definita dal documento ISO (ISO / IEC 14882: 2011 per c ++ 11). Ciò che differisce tra i sistemi operativi è il supporto per varie funzionalità tra i compilatori su questi sistemi operativi e i loro bug.

Also, What is primary standardization used nowadays?

Dipende dal compilatore disponibile, dalle sue caratteristiche e dall'organizzazione in cui lavori. Alcuni compilatori (come ad esempio il compilatore c ++ di TI) supportano solo c ++ 98. Alcune organizzazioni sono lente nel fare grandi cambiamenti (come cambiare la versione del compilatore) e non consentono le funzionalità di c ++ 11.

    
risposta data 26.08.2012 - 22:50
fonte

Leggi altre domande sui tag