<c++>using namespace std;
Résolu/Fermé
jacinthe87
Messages postés
194
Date d'inscription
mercredi 4 février 2009
Statut
Membre
Dernière intervention
15 juillet 2010
-
31 mai 2009 à 14:37
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 - 1 juin 2009 à 03:14
mamiemando Messages postés 33401 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 novembre 2024 - 1 juin 2009 à 03:14
A voir également:
- Using namespace std c'est quoi
- Relais colis std - Forum Consommation & Internet
- Access denied for user 'zabbix'@'localhost' (using password yes) ✓ - Forum Réseau
- Mysqli_real_connect(): (hy000/1045): access denied for user 'root'@'localhost' (using password: no) - Astuces et Solutions
- Fichier std - Forum Graphisme
- 31900058 std - Forum Carte-mère/mémoire
2 réponses
mamiemando
Messages postés
33401
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
28 novembre 2024
7 804
1 juin 2009 à 03:14
1 juin 2009 à 03:14
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 :
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
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
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
31 mai 2009 à 16:31
31 mai 2009 à 16:31
Un petit lien utile sur les namespaces