IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

using namespace std;


Sujet :

SL & STL C++

  1. #1
    Membre �clair�

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Par d�faut using namespace std;
    bonjour,suite a un debat houleux sur l'utilisation ou non des namespaces, j'aurais voulu savoir si oui ou non c'est un crime de mettre

    using namespace std;

    en debut de fichier.


    PS, je connais l'utilisation des namespace, et je sais les creer et les utiliser.
    la question n'est pas les namespaces sont utiles ou non, la question est a quoi sert using namespace std; . En esperant ne pas declancher un troll

    merci

    a++

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Disons que �a n'a aucune importance en d�but de fichier source (juste apr�s les headers, cela va de soi), mais c'est un crime capital de mettre cela dans un fichier d'en-t�te.

    En gros, c'est l'id�e g�n�rale.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre exp�riment�
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Par d�faut
    Les namespace comme leur nom l'indique sont des espace de nom
    Plus serieusement, quand tu te retrouves � utiliser de nombreuses classes et librairies diferentes, il est frequent de tomber sur des noms de classe identique => probl�mes !
    Pour r�gler le probl�me, il existe les namespace. En gros, tu donne + qu'un nom � ta classe au cas ou les utilisateur aurait une librairie avec une classe de meme nom...

    Par exemple :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
     
    namespace myspace {
     
    class A {
    ...
    };
     
    };
    ici ma classe A est proteg� par un namespace...

    Donc soit on prefixe tout par le namespace (�a c'est tr�s propre mais parfois tr�s chiant).

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    myspace::A objA = ...;
    Soit on utilise le namespace tout le temps. Dans ce cas le compilo peut gueuler s'il existe une autre classe de nom A


    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    using namespace myspace;
    ...
    A objA = ...;
    ...
    Voil�, c'est exactement pareil pour la stl

    Quelques precisions :

    - JAMAIS de using namespace dans un fichier .h !!! C'est tr�s tr�s crade

    - Le plus propre c'est de ne jamais utiliser le using namespace... Mais tout le monde le fait parceque c'est quand meme pratique ^^

    - La plupart du temps on met le using namespace en debut de .cpp, OK mais on sait alors � quoi s'attendre en cas de noms multiples.

    - Un peut plus propre mais c'est tr�s rare, tu peux aussi faire tes using namespace � chaque debut de fonction... comme �a tu ne declare que ceux dont tu as besoin et l� ou tu en a besoin... �a c'est clean tip top ^^

    J'espere que je suis claire... je ne suis pas un tr�s bon prof

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    Dans ce cas le compilo peut gueuler s'il existe une autre classe de nom A
    Et pire ya pas un risque de courcircuiter des classes?

  5. #5
    Membre �clair�

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Par d�faut
    heu en fait, je comprend pas pourquoi c'est crade dans un piont h et pas dans un .cpp est ce du au linkage??

    merci

    a++

  6. #6
    Membre �m�rite

    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2005
    Messages
    634
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par d�faut
    Car il se propagera dans tous les fichiers o� tu inclueras ton en-t�te et �a peut facilement te donner des erreurs de compilation sans t'en rendre compte facilement

  7. #7
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    Et �a inhibe l'int�r�t du namespace car si on veut utiliser une autre fonction situ�e dans autre namespace on sera oblig� de la pr�c�der de namespace::fonction,m�me si elle est tr�s fr�quente;
    car un "using namespace" au d�but d'un fichier est valable dans tout les blocs du fichier il me semble.

    Pouvait vous comfirmer que si on a:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    using namespace std;
     
     
    void f(){
         using namespace mon_namespace;
         cout<<endl;
         }
    Si "cout<<endl" est red�fini dans "mon_namespace" le "using namespace std;" le courcircuitera et le prog donc utilisera le cout classique?

    J'ai un gros doute.

  8. #8
    Membre exp�riment�
    Avatar de superspag
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    153
    D�tails du profil
    Informations personnelles :
    �ge : 45
    Localisation : France, Is�re (Rh�ne Alpes)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 153
    Par d�faut
    Et pire ya pas un risque de courcircuiter des classes?
    Qu'est ce que tu entend par courcuircuiter ? normalement, � part si les signatures sont exactement les memes... le compilo devrait gueuler

    heu en fait, je comprend pas pourquoi c'est crade dans un piont h et pas dans un .cpp est ce du au linkage??
    Imagine qu'un utilisateur Lambda se sert de tes code et include le .h en question... il fait un using namespace sans le savoir et il ne poura rien y faire. En regle generale, il faut faire le moins de chose possible dans un .h

    Si "cout<<endl" est red�fini dans "mon_namespace" le "using namespace std;" le courcircuitera et le prog donc utilisera le cout classique?
    Je ne comprend pas tr�s bien l�... Mais si en gros tu definit 2 operateur << avec les meme signatures dans des namespace diferent et que tu fait un using des deux... ben �a bug forcement

  9. #9
    Membre �m�rite

    Homme Profil pro
    �tudiant
    Inscrit en
    Mars 2005
    Messages
    634
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2005
    Messages : 634
    Par d�faut
    Ton dernier code ne compilera pas car il y aura une ambig�it� entre std::cout et mon_namespace::cout lors de l'instruction cout << endl; .

  10. #10
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    Je me demandais si il n'y avait pas de priorit� dans les namespace:
    Soit prime celui qui est le plus global.
    Soit au contraire c'est celui qui est le plus proche (au niveau des blocs) de la fonction.

    Mais apparemment ce n'est ni l'un ni l'autre:
    �a plante � la compile.

    Merci de l'info.

  11. #11
    Membre �prouv�
    Profil pro
    Inscrit en
    Ao�t 2003
    Messages
    159
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 159
    Par d�faut
    Oui, c'est tellement clair pour celui qui lit un code de ne pas avoir � rechercher d'ou vient telle ou telle methode.
    Et c'est tellement interessant de faire std:: ou myNameSpace::
    Alors, c'est presqu'un crime d'utiliser using namespace.

  12. #12
    Membre �clair�

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    421
    D�tails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 421
    Par d�faut
    merci;

    je crois que j'ai compris

    merci

    a++

  13. #13
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3

  14. #14
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Personellement j'utilise std:: � chaque reprise

  15. #15
    Membre �m�rite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par d�faut
    Citation Envoy� par Luther13
    Oui, c'est tellement clair pour celui qui lit un code de ne pas avoir � rechercher d'ou vient telle ou telle methode.
    Et c'est tellement interessant de faire std:: ou myNameSpace::
    Alors, c'est presqu'un crime d'utiliser using namespace.
    Attention aux d�ductions syst�matiques non rigoureuses...

    C'est certes moins fatigant de ne pas avoir � rechercher d'o� vient ci et �a, mais il y a aussi des cas particuliers.

    Parfois, certains noms de la librairie standard sont tellement connus qu'il ne viendrait en g�n�ral pas l'id�e de donner le m�me nom � d'autres objets. Exemple pour cout, cin, endl, les gens savent tous ce dont il s'agit.

    Avoir des std:: devant, �a nuit souvent � la lisibilit� dans ce cas pr�cis, car ces mots cl�s font tout de suite flash dans la t�te comme dit mon prof de Sp�.

    Bien s�r, dans ces cas-l�, c'est c'est peut-�tre mieux de mettre using std::cout/cin/endl, plut�t que using namespace std, sauf si l'on sait exactement de ce dont il va s'agir dans le code .cpp qui suit... (pas d'appel � des librairies tierces...).

    C'est pour �a qu'il faut �viter de g�n�raliser quelque chose quand on ne peut/sait pas le d�montrer.

  16. #16
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    ya pas une �criture plus compacte pour:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    using std::cout;
    using std::endl;
    ...
    ?

  17. #17
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Plus compacte?

  18. #18
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : France, Val de Marne (�le de France)

    Informations professionnelles :
    Activit� : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par d�faut
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    using std::cout,cin,endl;
    Ou dans ce style.

  19. #19
    Expert confirm�

    Inscrit en
    Novembre 2005
    Messages
    5 145
    D�tails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par d�faut
    Citation Envoy� par HanLee
    Parfois, certains noms de la librairie standard sont tellement connus qu'il ne viendrait en g�n�ral pas l'id�e de donner le m�me nom � d'autres objets. Exemple pour cout, cin, endl, les gens savent tous ce dont il s'agit.
    Ok, tu vas me citer tous les noms de la bibliotheque standard... je ne les connais moi-meme pas tous et parmis les moins connu il y en a qui sont communs.

    Ton exemple est aussi parfait: ca ne m'etonnerait pas de voir quelqu'un nommant ses variables en francais utiliser cout sans penser a cout; ca m'est bien arrive de vouloir nommer une variable int (pour integrale) alors que je sais bien que c'est un mot cle.

  20. #20
    Membre �m�rite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par d�faut
    Citation Envoy� par Jean-Marc.Bourguet
    Ok, tu vas me citer tous les noms de la bibliotheque standard... je ne les connais moi-meme pas tous et parmis les moins connu il y en a qui sont communs.

    Ton exemple est aussi parfait: ca ne m'etonnerait pas de voir quelqu'un nommant ses variables en francais utiliser cout sans penser a cout; ca m'est bien arrive de vouloir nommer une variable int (pour integrale) alors que je sais bien que c'est un mot cle.
    Ben non j'cite pas tout, j'ai bien dit cas particuliers quand j'ai parl�, 3 exactement, et je m'arr�terai l� (si si). J'ai retenu ma langue pour vector, parce que si tu penses � de la g�om�trie ou des maths, il y a des grandes chances que vector apparaisse ! Idem pour stack, list, queue...
    Oui pareil �a m'est arriv� pour int... J'comprenais pas De toute fa�on les erreurs de ce genre c'est vite d�tect�. Tu te dis "ah oui j'suis b�te!".

    Bon c'�tait des exemples subjectifs, mais assez repr�sentatifs de la plupart (!= tous). Mon post incite pas du tout � utiliser toujours les using tu sais. C'est juste que j'aime pas quand on dit "jamais", tout �a parce qu'il y a un risque de mal faire, aussi petit soit-il. Dans ce cas pr�sent, �a obstrue toute r�flexion.
    Ne jamais utiliser les goto, etc. Souvent ces r�gles ne sont pas pertinentes dans certains cas particuliers. Est-ce une raison pour y ob�ir ?
    Quand tu sais ce que tu fais, je ne vois pas le probl�me.
    On �vite toujours (!) les using dans les headers parce que le header est universel (ie destin� � �tre utilis� par n'importe qui).
    Par contre dans les fichiers .cpp qu'on n'inclut pas, si je mets using std::qqch, je suis conscient que je ne pourrais pas utiliser qqch.

    Ptain, mais pourquoi j'mets autant de temps � expliquer un truc ???

Discussions similaires

  1. Probleme avec "using namespace std"
    Par lui88 dans le forum C++
    R�ponses: 3
    Dernier message: 22/07/2009, 12h20
  2. Using namespace std erreur
    Par raimais dans le forum C++
    R�ponses: 3
    Dernier message: 10/03/2009, 17h29
  3. using namespace std Vs std::
    Par BigNic dans le forum SL & STL
    R�ponses: 12
    Dernier message: 24/01/2006, 15h26
  4. probleme avec : using namespace
    Par firejocker dans le forum C++
    R�ponses: 3
    Dernier message: 28/11/2005, 12h15
  5. using namespace std...
    Par miminou dans le forum SL & STL
    R�ponses: 14
    Dernier message: 24/10/2005, 10h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo