« Programmation C++/Les espaces de noms » : différence entre les versions

Contenu supprimé Contenu ajouté
Tchai (discussion | contributions)
m typo
Ropieur (discussion | contributions)
Aucun résumé des modifications
Ligne 1 :
{{Programmation C++}}
 
Les espaces de nom ont été introduits pour permettre de faire des regroupements logiques et résoudre les collisions de noms. Un espace de nom permet de regrouper plusieurs déclarations de variables, fonctions et classes dans un groupe nommé. Une pratique courante du langage C consistant à concaténer des noms entre eux afin de minimiser la probabilité de collisions avec des noms d'autres bibliothèques n'a plus raison d'être en C++. En effet, un même nom pourra être déclaré dans des espaces de noms différents évitant ainsi la collision lorsqu'ils sont inclus en même temps dans une unité.
Un espace de nom permet de regrouper plusieurs déclarations de variables, fonctions et classes dans un groupe nommé.
 
La déclaration d'un espace de noms se fait à l'aide du mot clé ''namespace''.
Un exemple d'espace de nom est <tt>std</tt>, défini par la bibliothèque standard, regroupant en autre les flux standards <tt>cin</tt>, <tt>cout</tt> et <tt>cerr</tt>.
 
Leurs noms complets sont <tt>std::cin</tt>, <tt>std::cout</tt> et <tt>std::cerr</tt>.
Tout comme l'accès à un membre d'une classe, l'opérateur de portée :: permet l'accès à l'ensemble des noms importés d'un espace de noms.
 
Avant l'introduction des espaces de noms, une pratique du C++ consistait à utiliser des classes pour faire des espaces de noms. Le problème est qu'une classe est instanciable et que sa portée est fermée. A contrario, la portée d'un espace de noms est ouvert, c'est-à-dire qu'il est possible de répartir un espace de noms sur plusieurs unités. Un espace de noms est donc extensible.
 
Un exemple d'espace de nom est <tt>std</tt>, défini par la bibliothèque standard, regroupant en autre les flux standards <tt>cin</tt>, <tt>cout</tt> et <tt>cerr</tt>. Ainsi lorsque <iostream> est inclus dans une source, il sera possible de les accéder en les dénommant par leurs noms complets <tt>std::cin</tt>, <tt>std::cout</tt> et <tt>std::cerr</tt>.
 
Pour simplifier le code, et les désigner sans spécifier l'espace de noms, il faut utiliser l'instruction suivante :
Ligne 35 ⟶ 40 :
...
int a = suivant(5);</source>
 
'''Recommandation''': Il est préférable de ne pas utiliser la directive <tt>using</tt> dans un fichier entête. En effet, la directive ayant pour effet d'ouvrir l'espace de noms à l'espace global, toute unité qui inclurait ce fichier entête se verrait automatiquement ouvrir l'espace en question pouvant provoquer rapidement des collisions si cette même unité incluait d'autres fichiers entêtes utilisant aussi la directive <tt>using</tt> sur d'autres espaces de noms.
 
== En plusieurs fois ==