
FAQ C++Consultez toutes les FAQ
Nombre d'auteurs : 34, nombre de questions : 368, derni�re mise � jour : 14 novembre 2021 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.
Un namespace, ou espace de nom (parfois aussi espace de nommage, voire r�f�rentiel lexical) est une zone de d�claration d'identificateurs permettant au compilateur de r�soudre les conflits de noms.
Si, par exemple, deux d�veloppeurs d�finissent des fonctions avec le m�me nom, il y aura un conflit lors de l'utilisation de ces fonctions dans un programme. Les espaces de nommage permettent de r�soudre ce probl�me en ajoutant un niveau suppl�mentaire aux identificateurs.
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | namespace a { void toto() // premi�re fonction toto { } } namespace b { void toto() // seconde fonction toto() { } } a::toto(); // appelle la premi�re b::toto(); // appelle la seconde |
Code c++ : | S�lectionner tout |
1 2 | void mylib_fonction1(); void mylib_fonction2(); |
Code c++ : | S�lectionner tout |
1 2 3 4 5 | namespace mylib { void fonction1(); void fonction2(); } |
Un namespace anonyme est un espace de nom� sans nom.
Code c++ : | S�lectionner tout |
1 2 3 4 | namespace { int a; // variable d�clar�e dans un namespace anonyme } |
Parce qu'un namespace traduit mieux la notion de port�e restreinte � un fichier, il est recommand� de privil�gier son usage en C++ par-rapport � celui du mot-cl� static utilis� dans le m�me but mais en C.
Si vous avez d�clar� une classe ou des fonctions dans un espace de nom :
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 | namespace ns { class Test { public: void F1(); void F2(); }; void Fonction1(); void Fonction2(); } |
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | namespace ns { void Test::F1() { } void Fonction1() { } } // autre possibilit� void ns::Test::F2() { } void ns::Fonction2() { } |
Toute la biblioth�que standard C++ est d�finie dans son propre espace de nom, le namespace std. Ainsi, il faut syst�matiquement utiliser le pr�fixe std:: devant tous les �l�ments qui en sont issus.
Code c++ : | S�lectionner tout |
1 2 3 4 5 | #include <iostream> int main() std::cout << "cout" << std::endl; } |
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 | #include <iostream> using namespace std; int main() { cout << "coucou" << endl; } |
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #include <iostream> void affiche_coucou() { using namespace std; // dans tout le corps de la fonction pr�fixer par std:: est facultatif cout << "coucou" << endl; } int main() { // ici il est obligatoire de pr�fixer par std:: affiche_coucou(); std::cout << "coucou" << std::endl; } |
Code c++ : | S�lectionner tout |
1 2 3 4 5 6 7 8 9 10 | #include <iostream> using std::cout; using std::endl; int main() { // si on veut utiliser cin par exemple, il faudra �crire std::cin cout << "coucou" << endl; } |

Utiliser using namespace xxx; indique au compilateur qu'il a le droit, quand il voit un nom dans le reste de la port�e courante, de le rechercher dans l'espace de nom xxx, ce qui peut all�ger le code, en permettant d'�crire :
Code c++ : | S�lectionner tout |
1 2 3 | using namespace std; cout << hex << 42 << endl; |
Code c++ : | S�lectionner tout |
std::cout << std::hex << 42 << std::endl;

Par contre, cette �criture est � proscrire dans des fichiers d'en-t�te, du moins � port�e de fichier. En effet, le but des espaces de nom est de permettre d'�viter des collisions de nom entre deux objets qui auraient le m�me nom, mais provenant de deux sources diff�rentes (et donc class�s dans deux espaces de nom diff�rents). L'utilisation de using est un raccourci, mais il n'est possible que si on sait qu'il n'y a pas de conflits. Si ce n'est pas le cas, il faut obligatoirement utiliser le nom qualifi� des objets.
Or, dans le cadre d'un fichier d'en-t�te, on ne peut pas savoir dans quels contextes ce fichier sera utilis�. Et comme il n'existe pas de commande qu'on puisse ins�rer pour dire d'arr�ter d'utiliser un using, on risque si on utilise cette �criture dans un fichier d'en-t�te de provoquer un conflit chez un de ses clients, qui n'aura aucun recours pour le corriger.
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 �aLes 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 � 2025 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.