Namespaces
Variants

History of C++

From cppreference.net
C++ language
General topics
Flow control
Conditional execution statements
Iteration statements (loops)
Jump statements
Functions
Function declaration
Lambda function expression
inline specifier
Dynamic exception specifications ( until C++17* )
noexcept specifier (C++11)
Exceptions
Namespaces
Types
Specifiers
constexpr (C++11)
consteval (C++20)
constinit (C++20)
Storage duration specifiers
Initialization
Expressions
Alternative representations
Literals
Boolean - Integer - Floating-point
Character - String - nullptr (C++11)
User-defined (C++11)
Utilities
Attributes (C++11)
Types
typedef declaration
Type alias declaration (C++11)
Casts
Memory allocation
Classes
Class-specific function properties
Special member functions
Templates
Miscellaneous
History of C++

Table des matières

C++ Primitif

  • 1979 : C avec Classes première implémentation
  1. Nouvelles fonctionnalités : classes , member functions , derived classes , compilation séparée, public and private access control , friends , vérification de type des arguments de fonction, default arguments , inline functions , overloaded assignment operator , constructors , destructors , f ( ) identique à f ( void ) , fonction d'appel et fonction de retour (fonctionnalités de synchronisation, absentes en C++)
  2. Bibliothèques : la bibliothèque de tâches concurrentes (absente en C++)
  • 1982 : Manuel de référence de C with Classes publié
  • 1984 : C84 implémenté, manuel de référence publié
  • 1985 : Cfront 1.0
  1. Nouvelles fonctionnalités : fonctions virtuelles , surcharge de fonctions et d'opérateurs , références , new et delete , le mot-clé const , opérateur de résolution de portée
  2. Ajouts à la bibliothèque : nombres complexes , string (version AT&T), flux d'E/S
  • 1985 : Le langage de programmation C++, 1ère édition
  • 1986 : Le document "whatis?" décrivant les objectifs de conception restants, incluant l'héritage multiple, la gestion des exceptions et les templates.
  • 1987 : Prise en charge de C++ dans GCC 1.15.3
  • 1989 : Cfront 2.0
  1. Nouvelles fonctionnalités : héritage multiple , pointeurs vers membres , accès protégé , liaison de type sûre, classes abstraites , fonctions membres statiques et fonctions membres qualifiées const , surcharges spécifiques à la classe pour new et delete
  2. Ajouts à la bibliothèque : manipulateurs d'E/S
  • 1990 : Le Manuel de Référence C++ Annoté

Ce livre décrivait le langage tel que conçu, incluant certaines fonctionnalités qui n'étaient pas encore implémentées. Il a servi de standard de facto jusqu'à l'ISO.

  1. Nouvelles fonctionnalités : namespaces , exception handling , nested classes , templates
  • 1991 : Cfront 3.0
  • 1991 : The C++ Programming Language, 2 e édition

C++ Standard

  • 1990 : Comité ANSI C++ fondé
  • 1991 : Comité ISO C++ fondé
  • 1992 : STL implémentée en C++

Période C++98/03

  • 1998 : C++98 (ISO/CEI 14882:1998)
  1. Nouvelles fonctionnalités : RTTI ( dynamic_cast , typeid ), types de retour covariants , opérateurs de conversion , mutable , bool , déclarations dans les conditions, instanciations de templates , templates membres , export
  2. Ajouts à la bibliothèque : locales , bitset , valarray , auto_ptr , chaîne de caractères template , flux d'E/S , et nombres complexes .
  3. Basé sur STL : conteneurs , algorithmes , itérateurs , objets fonctionnels
  • 1998 : The C++ Programming Language, 3ème édition
  • 1999 : Boost fondé par les membres du comité pour produire de nouvelles bibliothèques candidates de haute qualité pour la norme.
  • 2003 : C++03 (ISO/IEC 14882:2003)

Il s'agissait d'une révision mineure, destinée à être un peu plus qu'un correctif technique. Cette révision introduit la définition de value initialization .

Rapports de défaut corrigés dans C++03 (92 noyau, 125 bibliothèque)

Ce TR a examiné les coûts des diverses abstractions C++, a fourni des conseils de mise en œuvre, a discuté de l'utilisation de C++ dans les systèmes embarqués et a introduit <hardware> l'interface vers <iohw.h> du C ISO/IEC TR 18037:2008.

Ce TR est une extension de bibliothèque C++, qui ajoute les éléments suivants à la bibliothèque standard C++ :

  1. De Boost : reference_wrapper , Pointeurs intelligents , Fonction membre , result_of , bind , function , Traits de type , Génération aléatoire , Fonctions mathématiques spéciales, tuple , array , Conteneurs non ordonnés (incluant hash ), et Expressions régulières .
  2. De C99 : fonctions mathématiques de <math.h> nouvelles dans C99, classe de caractères blancs , Environnement à virgule flottante , hexfloat Manipulateur d'E/S, types entiers de taille fixe , le type long long , va_copy , les familles de fonctions snprintf() et vfscanf() , et les spécificateurs de conversion C99 pour les familles de fonctions printf() et scanf() .

L'intégralité de TR1, à l'exception des fonctions spéciales, a été incluse dans C++11, avec des modifications mineures.

Cette norme internationale est une extension de la bibliothèque standard C++, qui ajoute les fonctions spéciales faisant partie de TR1, mais non incluses dans C++11 : intégrales elliptiques, intégrale exponentielle, polynômes de Laguerre, polynômes de Legendre, polynômes d'Hermite, fonctions de Bessel, fonctions de Neumann, fonction bêta et fonction zêta de Riemann. Cette norme a été fusionnée dans C++17 .

Période C++11

Article principal : C++11

Un grand nombre de modifications ont été introduites pour normaliser les pratiques existantes et améliorer les abstractions disponibles pour les programmeurs C++

Ce TR implémente les types de nombres flottants décimaux de la norme IEEE 754-2008 pour l'arithmétique en virgule flottante : std::decimal::decimal32 , std::decimal::decimal64 , et std::decimal::decimal128 .

Période C++14

Article Principal : C++14

Révision mineure de la norme C++

Ce TS est une extension expérimentale de la bibliothèque C++ qui spécifie une bibliothèque de système de fichiers basée sur boost.filesystem V3 (avec quelques modifications et extensions). Ce TS a été fusionné dans C++17.

Cette TS normalise les API parallèles et vectorielles-parallèles pour tous les algorithmes de la bibliothèque standard, et ajoute également de nouveaux algorithmes tels que reduce , transform_reduce , ou exclusive_scan . Cette TS a été intégrée dans C++17.

Cette TS étend le langage de base du C++ avec des blocs synchronisés et atomiques, ainsi que des fonctions transaction-sécurisées, qui implémentent la sémantique de la mémoire transactionnelle.

Cette spécification technique ajoute plusieurs nouveaux composants à la bibliothèque standard C++ : optional , any , string_view , sample , search , apply , allocateurs polymorphes , et templates de variables pour les traits de type. Cette spécification technique a été intégrée dans C++17.

Cette spécification technique étend le langage cœur du C++ avec les concepts (exigences de types nommées) et les contraintes (limites sur les types autorisés dans les déclarations de templates, fonctions et variables), ce qui facilite la métaprogrammation et simplifie les diagnostics d'instanciation de templates, voir concepts . Cette spécification technique a été intégrée dans le C++20, avec certaines omissions.

Cette spécification technique étend la bibliothèque C++ pour inclure plusieurs extensions à std::future , les latches et les barriers , ainsi que les pointeurs intelligents atomiques.

Période C++17

Article Principal : C++17

La révision majeure de la norme C++ après C++11

Cette TS étend la bibliothèque C++ pour inclure les ranges , une nouvelle abstraction plus puissante pour remplacer les paires d'itérateurs, ainsi que les vues de ranges, les ranges sentinelles, les projections pour les transformations à la volée, de nouveaux adaptateurs d'itérateurs et algorithmes. Cette extension permet enfin de trier un vecteur avec sort ( v ) ;

Cette spécification technique étend le langage cœur du C++ et la bibliothèque standard pour inclure les coroutines sans pile (fonctions reprises). Cela ajoute les mots-clés co_await , co_yield , et co_return .

Cette TS étend la bibliothèque C++ pour inclure la mise en réseau TCP/IP basée sur boost.asio .

Cette TS étend le langage cœur du C++ pour inclure les modules. Cela ajoute les identifiants spéciaux module , import , et réintroduit le mot-clé export avec une nouvelle signification.

Cette TS étend la bibliothèque C++ pour inclure deux nouvelles politiques d'exécution ( unseq et vec ), des algorithmes parallèles supplémentaires tels que reduction_plus ou for_loop_strided , des blocs de tâches pour le forking et joining de tâches parallèles, des types SIMD et des opérations sur ces types.

Période C++20

Article Principal : C++20

La révision majeure de la norme C++ après C++17

Cette spécification technique étend le C++ avec les fonctionnalités pour inspecter les entités du programme telles que les variables, les énumérations, les classes et leurs membres, les lambdas et leurs captures, etc.

Développement futur

Article principal : C++23

La prochaine révision majeure de la norme C++

Voir aussi

Documentation C pour Historique du C

Liens externes

1. Une histoire du C++ : 1979-1991
2. Évolution d'un langage dans et pour le monde réel : C++ 1991-2006
3. Prospérer dans un monde encombré et changeant : C++ 2006-2020
4. Fondation Standard C++
5. C++ sur Wikipédia
6. Comité de normalisation C++