FAQ C++Consultez toutes les FAQ

Nombre d'auteurs : 35, nombre de questions : 368, dernière mise à jour : 17 novembre 2018  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur les forums de http://www.developpez.com et de l'expérience personnelle des auteurs.

Je tiens à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes ; les auteurs font le maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur ou si vous souhaitez devenir rédacteur, lisez ceci.

Sur ce, nous vous souhaitons une bonne lecture.


SommaireGénéralités sur le C++Norme (5)
précédent sommaire suivant
 

Oui.

Le standard du C++ a été finalisé et adopté par l'ISO (International Organization for Standardization) et par d'autres organismes de normalisation tels que l'ANSI (The American National Standards Institute), le BSI (The British Standards Institute), le DIN (The German National Standards Organization).
L'adoption du standard s'est faite à l'unanimité le 14 novembre 1997.

Le comité ANSI C++ est appelé « X3J16 ». Le groupe de travail de l'ISO se nomme « WG21 ». Le processus de normalisation implique un grand nombre d'acteurs : des représentants de l'Australie, du Canada, du Danemark, de la France, de l'Allemagne, de l'Irlande, du Japon, de la Hollande, de la Nouvelle-Zélande, de la Suède, du Royaume-Uni, et des États-Unis ainsi que des représentants d'une centaine de sociétés plus de nombreux particuliers impliqués. Les acteurs majeurs incluent AT&T, Ericsson, Digital, Borland, Hewlett Packard, IBM, Mentor Graphics, Microsoft, Silicon Graphics, Sun Microsystems et Siemens. Après 8 ans de travaux, le standard est maintenant finalisé. Le standard a été approuvé par un vote à l'unanimité des représentants présents à Morristown le 14 novembre 1997.

Mis à jour le 10 février 2004 Cline

Il y a au moins trois façons d'obtenir une copie électronique de la norme :

Note : le document fourni par l'ISO est plus de 10 fois plus onéreux que celui de l'ANSI, alors que le contenu technique est identique. La page de garde est différente, mais le contenu technique est identique. Ne me demandez pas pourquoi l'ISO demande aussi cher par-rapport aux autres pour la même chose ; c'est la technique commerciale de l'ISO ; si malgré tout vous voulez poser la question, faites-le à leur service commercial.

Il y a au moins deux façons d'obtenir une copie papier du document :
  • 175 $ (publié par l'ANSI) : allez sur cette page http://www.techstreet.com/standards/...uct_id=1852925, sélectionnez « HardCopy » dans la liste et cliquez sur « Place this in your shopping basket ».
  • Prix non connu (publié par l'ANSI) : appelez le NCITS (National Committee for Information Technology Standards ; c'est le nouveau nom du comité autrefois connu sous le nom de « X3 »). La personne de contact est Monica Vega, 202-626-5739 ou 202-626-5738. Demandez le document FDC 14882. Soyez prêt à dépenser un peu d'argent, il n'est sûrement pas gratuit.

On pourra également noter la publication de la norme de 2003 chez Wiley : The C++ Standard: Incorporating Technical Corrigendum 1.

Il y a trois autres moyens d'obtenir (gratuitement) un document intéressant à consulter :
  • Si vous voulez suivre le document en cours d'évolution pour la prochaine version de la norme (et qui est donc susceptible d'évoluer avant que cette version ne sorte) : allez sur le site https://isocpp.org/ et cliquez à gauche sur « Working Draft of the next standard ».
  • La page http://www.open-std.org/jtc1/sc22/wg...1/docs/papers/ contient tous les drafts et autres papiers visant à faire évoluer la norme.
  • le communiqué de presse de l'ISO (ce n'est pas une copie de la norme) est ici : http://www.stroustrup.com/. Celui-ci est compréhensible par des non développeurs.

Mis à jour le 20 mai 2016 Jean-Marc.Bourguet JolyLoic

C++0x est le nom de code de la prochaine version de l'actuel standard ISO C++ 98, qui porte le nom de C++98. Cette future norme devrait être ratifiée d'ici 2009, et le 'x' dans son nom de code sera alors remplacé par l'année en cours (par exemple, C++09 si cela a lieu en 2009).

Faire évoluer un langage tel que le C++ est une tâche complexe qui nécessite du temps. Conscient que C++0x ne serait pas ratifié avant la fin de la décennie, le comité de normalisation ISO a entrepris et achevé en 2005 la rédaction d'un document intermédiaire limité au développement d'extensions à la bibliothèque standard du C++. Vous pouvez lire à ce sujet Qu'est-ce que le Library Technical Report (tr1 / tr2) ?.
Voici quelques liens vers des documents sur le sujet :


On peut également trouver des brouillons du prochain standard à cette adresse : C++ Standards Committee Papers.

Mis à jour le 3 juillet 2007 Aurelien.Regat-Barrel Laurent Gomila

Le Technical Report on C++ Library Extensions est le premier Technical Report (TR1) consacré à la bibliothèque standard du C++. Il a été réalisé en 2005, et constitue une sorte de brouillon officiel décrivant un ensemble d'extensions à la bibliothèque standard actuelle susceptibles d'être adoptées dans C++0x. Un deuxième document du même type est actuellement à l'étude (TR2).

Un Technical Report n'est pas normatif, c'est-à-dire qu'il ne fait pas officiellement partie de la norme, et ne garantit pas que ce sera le cas dans le futur. Les distributeurs de compilateurs ne sont pas obligés non plus de développer et fournir ces extensions. Un autre élément important est que les extensions proposées s'appuient sur les capacités actuelles du langage C++, et non sur les futures possibilités de C++0x.

Cependant, un TR (Technical Report) préfigure fortement ce que sera la prochaine norme C++, et l'objectif d'un tel document est double :

  • fournir dès maintenant aux programmeurs C++ de nouvelles bibliothèques préstandards ;
  • obtenir des retours d'expériences sur ces ajouts afin d'y apporter des améliorations avant leur normalisation définitive.

Au niveau pratique, toutes les nouveautés introduites par le TR1 le sont au sein d'un nouveau namespace tr1 membre du namespace standard std. De nombreux éléments sont directement issus de la bibliothèque boost. On retrouve par exemple les fameux shared_ptr (voir Comment utiliser les pointeurs intelligents de Boost ?), qui ont été intégrés aux côtés de std::auto_ptr dans le fichier d'en-tête <memory> (voir Pourquoi faut-il se méfier de std::auto_ptr ?) :

Code c++ : Sélectionner tout
1
2
3
4
5
6
#include <memory> 
  
int main() 
{ 
    std::tr1::shared_ptr<int> p( new int ); 
}
Les principales extensions issues de boost et incluses dans le TR1 sont :
  • enrichissement de <memory> avec des pointeurs intelligents (shared_ptr, weak_ptr…) ;
  • enrichissement de <functional> (bind, ref, reference_wrapper, mem_fn, result_of…) ;
  • enrichissement de <utility> (tuple_size, tuple_element…) ;
  • ajout de <tuple> (collections d'éléments : paires, triples, quadruples…) ;
  • ajout de <type_traits> (aide à la méta-programmation) ;
  • ajout de <random> (génération de nombres aléatoires) ;
  • ajout de <array> (tableau de taille fixe) ;
  • ajout de <unordered_set> et de <unordered_map> (tables de hachage) ;
  • ajout de <regex> (expressions régulières).

Pour plus de détails, vous pouvez aussi lire Library Technical Report.

Mais le TR1 ne se résume pas à la récupération de bibliothèques de Boost.
Il y a aussi de nombreuses nouveautés issues du C99 et un enrichissement important des fonctions mathématiques.

Plusieurs compilateurs et développeurs de bibliothèque standard se sont lancés dans leur propre implémentation du TR1.
C'est le cas de GCC et de CodeWarrior par exemple, ainsi que de Dinkumware qui est le premier a l'avoir implémenté à 100 % (Dinkumware est aussi le fournisseur de la STL de VC++, ce qui laisse penser que ce dernier supportera lui aussi le TR1).

Les développeurs de Boost se sont bien sûr eux aussi attelés à la tâche, et Boost.TR1 est actuellement en cours de développement.

Mis à jour le 3 février 2007 Aurelien.Regat-Barrel

En plus de ses mots-clé, le C++ réserve certains identificateurs, notamment pour l'implémentation de la bibliothèque standard ou pour les ajouts propriétaires que l'on peut trouver sur la plupart des compilateurs. Cela assure qu'il n'y aura aucun conflit entre votre code et celui livré par le compilateur, qui ne sera pas forcément documenté.

En outre, la norme réserve (et donc interdit) les identificateurs suivants :

  • Les noms commençant par un « _ » suivi d'une majuscule.
  • Les noms commençant par « _ » dans le namespace global.
  • Les noms contenant « __ » (deux « _ » d'affilée).

Une version simplifiée de cette règle est donc de ne pas commencer ses noms par un « _ » du tout, ni d'utiliser « __ ».

Mis à jour le 17 mars 2008 JolyLoic Laurent Gomila Mat007

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2019 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.