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à.