Posez votre question Signaler

<c++>using namespace std; [Résolu]

jacinthe87 199Messages postés 4 février 2009Date d'inscription 15 juillet 2010Dernière intervention - Dernière réponse le 1 juin 2009 à 03:14
Bonjour,
C'est quoi la diffecrence entre
using namespace std;

et
std::

y'a des personnes qui disent qu'il faut eviter les "using namespace std;" surtout si on travaille avec des templates, mais est ce n'est pas la meme chose(std:: <=> using namespace std)???
Lire la suite 

<c++>using namespace std »

2 réponses
Réponse
+3
moins plus
Qu'est ce qu'un namespace ?

Tu peux voir un namespace un peu comme un "répertoire" contenant éventuellement d'autres namespaces, des classes, des fonctions etc... Le namespace "racine" est noté ::. Par exemple std::endl est en fait ::std::endl.

Un namespace n'a donc rien à voir avec les templates. Ça permet d'éviter juste des collisions entre les noms provenant de librairies extérieures et ton code. Par exemple pour éviter une collision entre une fonction que tu appellerais max et la fonction max de la lib C++, la fonction max est dans le namespace std.

Un using namespace std; et un std:: on deux rôles fondamentalement différents.

- Un using namespace permet de dire au compilateur : en plus de regarder dans le namespace ::, si tu ne trouves pas un symbole (fonction, classe...), regarde si tu le trouves dans le namespace std.

- Le fait d'écrire std::max dit au compilateur de chercher explicitement la fonction max du namespace std::.

Pourquoi mieux vaut éviter les using namespace ?

En ce qui me concerne je te déconseille d'utiliser les using namespace. Si l'écriture est certes plus légère, le programme n'est pas forcément plus lisible et peut ne pas compiler à cause d'ambiguïtés. En particulier, il ne faut jamais mettre un using namespace dans un header car celui-ci peut "contaminer" des sections de code et engendrer des collisions.

Par exemple si un header a.hpp défini une fonction int max(int,int) et inclue b.hpp qui fait un using namespace std, tout fichier qui inclura b.hpp et appelera int max(int,int) risque de ne plus compiler à cause d'une ambiguïté.

Ceci dit comme un fichier cpp n'est jamais inclu, libre à toi d'inclure (à tes risques et périls) d'y faire des using namespace.

Comment ça s'utilise ?

Tout simplement comme ça :
#include <iostream>

namespace pouet{
  inline void plop(){
    std::cout << "plop" << std::endl;
  }
}

int main(){
  pouet::plop();
  return 0;
}

Attention à mettre tes #include en dehors des namespace, sans quoi le code sera inclu... dans ce namespace (ce serait dommage de devoir appeler pouet::std::endl !)

Bonne chance
Ajouter un commentaire
Réponse
+0
moins plus
Un petit lien utile sur les namespaces
Ajouter un commentaire
Ce document intitulé « <c++>using namespace std; » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?