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

m
<source> -> <syntaxhighlight> (phab:T237267)
(typo)
m (<source> -> <syntaxhighlight> (phab:T237267))
 
Pour simplifier le code, et les désigner sans spécifier l'espace de noms, il faut utiliser l'instruction suivante :
<sourcesyntaxhighlight lang="cpp">
using namespace std;
</syntaxhighlight>
</source>
 
Utiliser différents espaces de noms permet, lors d'un projet en équipe ou de l'utilisation de bibliothèque externes, de créer plusieurs entités portant le même nom.
 
Pour déclarer vos fonctions, variables et classes dans votre espace de noms, placez-les dans un bloc de ce type :
<sourcesyntaxhighlight lang="cpp">
namespace identifiant
{
// Déclarations ici ...
}
</syntaxhighlight>
</source>
 
Exemple :
<sourcesyntaxhighlight lang="cpp">
namespace exemple
{
}
}
</syntaxhighlight>
</source>
 
== Utiliser un espace de noms ==
Pour utiliser les entités d'un espace de noms en dehors de celui-ci (voire dans un autre espace de noms), vous pouvez utiliser le nom précédé de l'espace de nom :
<sourcesyntaxhighlight lang="cpp">
int a = exemple::suivant(5);
</syntaxhighlight>
</source>
 
ou utiliser la déclaration <code>using</code> :
<sourcesyntaxhighlight lang="cpp">
using exemple::suivant;
...
int a = suivant(5);
</syntaxhighlight>
</source>
 
ou encore utiliser la directive <code>using</code>
 
<sourcesyntaxhighlight lang="cpp">
using namespace exemple;
...
int a = suivant(5);
</syntaxhighlight>
</source>
 
'''Recommandation''': Il est préférable de ne pas utiliser les directives <code>using</code> dans un fichier entête, excepté dans les fonctions ''inline''. 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 <code>using</code> sur d'autres espaces de noms.
 
Exemple:
<sourcesyntaxhighlight lang="cpp">
namespace global {
namespace exemple {
namespace ge = global::exemple; // alias
int a = ge::suivant(5);
</syntaxhighlight>
</source>
 
== En plusieurs fois ==
*Fichier '''exemple.h'''
 
<sourcesyntaxhighlight lang="cpp">
namespace exemple
{
int suivant(int n);
}
</syntaxhighlight>
</source>
 
*Fichier '''exemple.cpp'''
 
<sourcesyntaxhighlight lang="cpp">
#include "exemple.h"
 
}
}
</syntaxhighlight>
</source>
1 535

modifications