Rechercher : dans
Par :

<c++>using namespace std;

Dernière réponse le 1 jun 2009 à 03:14:29 jacinthe87, le 31 mai 2009 à 14:37:33 
 Signaler ce message aux modérateurs

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)???

The best way to escape from a problem is to solve it.
Configuration: Windows XP
Safari 530.5

Meilleures réponses pour « using namespace std; » dans :
Introduction à la STL en C++ (standard template library) VoirIntroduction Principales classes de la STL std::pair std::list std::vector std::set std::map Les iterators iterator et const_iterator reverse_iterator et const_reverse_iterator Les algorithmes ...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Héritage virtuel VoirHéritage virtuel Code 7.9 : héritage virtuel #include using namespace std; class Creature { public: Creature():age(3) { cout
Hello World version .NET VoirHello World version .NET L’exemple de code que nous allons maintenant examiner est la version en code managé de notre programme Hello World. Code 10.1 : Hello World 1: #using 2: 3:using namespace System; 4: 5:int main()...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...

1

KX, le 31 mai 2009 à 16:31:26

Un petit lien utile sur les namespaces La confiance n'exclut pas le contrôle 

Répondre à KX

2

 mamiemando, le 1 jun 2009 à 03:14:29
  • +1

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

Répondre à mamiemando
Collection CommentÇaMarche.net