C++
La norme ISO C ++
Recherche…
Introduction
En 1998, il y a eu une première publication du standard rendant C ++ un langage standardisé en interne. A partir de ce moment, C ++ a évolué, donnant lieu à différents dialectes du C ++. Sur cette page, vous trouverez un aperçu de toutes les différentes normes et de leurs modifications par rapport à la version précédente. Les détails sur l'utilisation de ces fonctionnalités sont décrits sur des pages plus spécialisées.
Remarques
Lorsque C ++ est mentionné, il est souvent fait référence à "la norme". Mais quelle est exactement cette norme?
C ++ a une longue histoire. Lancé en tant que petit projet par Bjarne Stroustrup au sein des Bell Labs, au début des années 90, il était devenu très populaire. Plusieurs sociétés créaient des compilateurs C ++ afin que les utilisateurs puissent exécuter leurs compilateurs C ++ sur un large éventail d’ordinateurs. Mais pour faciliter cela, tous les compilateurs concurrents devraient partager une définition unique de la langue.
À ce stade, le langage C avait été normalisé avec succès. Cela signifie qu'une description formelle de la langue a été écrite. Celle-ci a été soumise à l’American National Standards Institute (ANSI), qui a ouvert le document pour examen et l’a ensuite publié en 1989. Un an plus tard, l’Organisation internationale de normalisation , ISO, dérivé du grec isos, qui signifie égal.), A adopté la norme américaine en tant que norme internationale.
Pour C ++, il était clair dès le début qu'il y avait un intérêt international. Un groupe de travail au sein de l'ISO a été créé (connu sous le nom de GT21, au sein du sous-comité 22). Ce groupe de travail a rédigé une première norme vers 1995. Mais comme nous le savons les programmeurs, il n’ya rien de plus dangereux pour une diffusion planifiée que les fonctionnalités de dernière minute, et c’est aussi le cas pour C ++. En 1995, une nouvelle bibliothèque géniale nommée STL a fait surface et les personnes travaillant dans WG21 ont décidé d'ajouter une version allégée au brouillon C ++. Naturellement, les délais ont été dépassés et, trois ans plus tard, le document est devenu définitif. ISO est une organisation très formelle, de sorte que le standard C ++ a été baptisé avec le nom peu commercialisable de ISO / IEC 14882. Comme les normes peuvent être mises à jour, cette version exacte est connue sous le nom de 14882: 1998.
Et en effet, il y avait une demande de mise à jour de la norme. Le standard est un document très épais, qui vise à décrire exactement le fonctionnement des compilateurs C ++. Même une légère ambiguïté mérite d’être corrigée. En 2003, une mise à jour a été publiée en 14882: 2003. Cependant, cela n'a ajouté aucune fonctionnalité à C ++; les nouvelles fonctionnalités ont été programmées pour la deuxième mise à jour.
De manière informelle, cette deuxième mise à jour était connue sous le nom de C ++ 0x, car on ne savait pas si cela prendrait avant 2008 ou 2009. Eh bien, cette version a également été légèrement retardée, ce qui explique pourquoi elle est devenue 14882: 2011.
Heureusement, le GT21 a décidé de ne pas laisser cela se reproduire. C ++ 11 a été bien accueilli et a suscité un intérêt renouvelé pour C ++. Pour conserver cet élan, la troisième mise à jour est passée de la planification à la publication en 3 ans, pour devenir 14882: 2014.
Le travail ne s'est pas arrêté là non plus. La norme C ++ 17 a été proposée et le travail pour C ++ 20 a été démarré.
Projets de travail actuels
Toutes les normes ISO publiées sont disponibles à la vente auprès de la boutique ISO ( http://www.iso.org ). Les versions de travail des normes C ++ sont disponibles gratuitement pour le public.
Les différentes versions de la norme:
- À venir (parfois appelé C ++ 20 ou C ++ 2a): version de travail actuelle ( version HTML )
- Proposé (parfois appelé C ++ 17 ou C ++ 1z): ébauche de travail de mars 2017 N4659 .
- C ++ 14 (parfois appelé C ++ 1y): version de travail de novembre 2014 N4296
- C ++ 11 (parfois appelé C ++ 0x): brouillon de travail de février 2011 N3242
- C ++ 03
- C ++ 98
C ++ 11
Le standard C ++ 11 est une extension majeure du standard C ++. Vous trouverez ci-dessous un aperçu des modifications telles qu'elles ont été regroupées dans la FAQ isocpp avec des liens vers une documentation plus détaillée.
Extensions de langue
Caractéristiques générales
- auto
- decltype
- Déclaration de portée
- Listes d'initialisation
- Syntaxe d'initialisation uniforme et sémantique
- Références Rvalue et sémantique de déplacement
- Lambdas
- sauf pour empêcher la propagation des exceptions
- constexpr
- nullptr - un littéral de pointeur nul
- Copier et redéfinir les exceptions
- Espaces de noms en ligne
- Littéraux définis par l'utilisateur
Des classes
- = par défaut et = supprimer
- Contrôle du déplacement et de la copie par défaut
- Déléguer des constructeurs
- Initialisateurs membres en classe
- Constructeurs hérités
- Contrôles de remplacement: remplacer
- Contrôles de remplacement: final
- Opérateurs de conversion explicite
Autres types
- classe enum
- long long - un entier plus long
- Types entiers étendus
- Unions généralisées
- POD généralisé
Modèles
- Modèles externes
- Alias de modèle
- Modèles variadiques
- Types locaux comme arguments de modèle
Concurrence
- Modèle de mémoire de concurrence
- Initialisation dynamique et destruction avec accès simultané
- Stockage local
Fonctions linguistiques diverses
- Quelle est la valeur de __cplusplus pour C ++ 11?
- Suffixe type de syntaxe de retour
- Prévenir le rétrécissement
- Crochets à angle droit
- static_assert assertions à la compilation
- Littéraux de chaîne bruts
- Les attributs
- Alignement
- Fonctions C99
Extensions de bibliothèque
Général
- unique_ptr
- shared_ptr
- faiblesse_ptr
- Collecte des ordures ABI
- tuple
- Caractères de type
- fonction et lier
- Expressions régulières
- Utilitaires de temps
- Génération de nombres aléatoires
- Scalled allocators
Conteneurs et Algorithmes
- Améliorations des algorithmes
- Amélioration des conteneurs
- unordered_ * conteneurs
- std :: array
- forward_list
Concurrence
- Des filets
- Exclusion mutuelle
- Serrures
- Les variables de condition
- Atomique
- Futures et promesses
- async
- Abandonner un processus
C ++ 14
La norme C ++ 14 est souvent appelée correction de bogue pour C ++ 11. Il ne contient qu'une liste limitée de modifications dont la plupart sont des extensions des nouvelles fonctionnalités de C ++ 11. Vous trouverez ci-dessous un aperçu des modifications telles qu'elles ont été regroupées dans la FAQ isocpp avec des liens vers une documentation plus détaillée.
Extensions de langue
- Littéraux binaires
- Déduction de type retour généralisée
- decltype (auto)
- Captures de lambda généralisées
- Lambdas génériques
- Modèles variables
-
constexpr
étendu - L'attribut
[[deprecated]]
- Séparateurs de chiffres
Extensions de bibliothèque
- Verrouillage partagé
- Littéraux définis par l'utilisateur pour
std::
types -
std::make_unique
- Transformation de type
_t
alias - Adressage des tuples par type (ex:
get<string>(t)
) - Opérateurs transparents (par exemple,
greater<>(x)
) -
std::quoted
Déconseillé / Supprimé
-
std::gets
été déprécié en C ++ 11 et retiré de C ++ 14 -
std::random_shuffle
est obsolète
C ++ 17
Le standard C ++ 17 est complet et a été proposé pour la normalisation. Dans les compilateurs avec support expérimental pour ces fonctionnalités, il est généralement appelé C ++ 1z.
Extensions de langue
- Plier les expressions
- déclarant des arguments de modèle non-type avec
auto
- Elision de copie garantie
- Déduction du paramètre de modèle pour les constructeurs
- Liaisons structurées
- Espaces de noms imbriqués compacts
- Nouveaux attributs:
[[fallthrough]]
,[[nodiscard]]
,[[maybe_unused]]
- Message par défaut pour
static_assert
- Initialiseurs dans
if
etswitch
- Variables en ligne
-
if constexpr
- Ordre d'évaluation de l'expression garantit
- Allocation de mémoire dynamique pour les données sur-alignées
Extensions de bibliothèque
-
std::optional
-
std::variant
-
std::string_view
-
merge()
etextract()
pour les conteneurs associatifs - Une bibliothèque de système de fichiers avec l'en-tête
<filesystem>
. - Versions parallèles de la plupart des algorithmes standard (dans l' en -tête
<algorithm>
). - Ajout de fonctions mathématiques spéciales dans l' en -tête
<cmath>
. - Déplacement de nœuds entre map <>, unordered_map <>, set <> et unordered_set <>
C ++ 03
Le standard C ++ 03 traite principalement des rapports de défauts du standard C ++ 98. En dehors de ces défauts, il ne fait qu'ajouter une nouvelle fonctionnalité.
Extensions de langue
C ++ 98
C ++ 98 est la première version standardisée de C ++. Comme il a été développé en tant qu'extension de C, de nombreuses fonctionnalités qui séparent C ++ de C sont ajoutées.
Extensions linguistiques (en ce qui concerne C89 / C90)
- Classes, classes dérivées, fonctions de membre virtuel, fonctions de membre const
- Fonction surcharge, surcharge de l'opérateur
- Commentaires sur une seule ligne (a été introduit dans la langue C avec la norme C99)
- Les références
- nouveau et supprimer
- type booléen (a été introduit dans la langue C avec la norme C99)
- des modèles
- espaces de noms
- des exceptions
- moulages spécifiques
Extensions de bibliothèque
- La bibliothèque de modèles standard
C ++ 20
C ++ 20 est la nouvelle norme de C ++, actuellement en développement, basée sur la norme C ++ 17. Ses progrès peuvent être suivis sur le site officiel ISO cpp .
Les fonctionnalités suivantes sont simplement ce qui a été accepté pour la prochaine version du standard C ++, ciblé pour 2020.
Extensions de langue
Aucune extension de langue n'a été acceptée pour le moment.
Extensions de bibliothèque
Aucune extension de bibliothèque n'a été acceptée pour le moment.