Dans tous nos cours de c++, tous les enseignants mettent toujours using namespace std;
juste après les #include
dans leurs fichiers .h
. Cela me semble être dangereux car en incluant ensuite cet en-tête dans un autre programme, je vais importer l'espace de noms dans mon programme, peut-être sans m'en rendre compte, sans l'intention ou sans le vouloir (l'inclusion d'en-têtes peut être très profondément imbriquée).
Alors ma question est double : Ai-je raison de penser que using namespace
ne devrait pas être utilisé dans les fichiers d'en-tête, et/ou y a-t-il un moyen de l'annuler, quelque chose comme :
//header.h
using namespace std {
.
.
.
}
Une autre question dans le même sens : Un fichier d'en-tête devrait-il #include
tous les en-têtes dont le fichier .cpp
correspondant a besoin, seulement ceux nécessaires pour les définitions de l'en-tête et laisser le fichier .cpp
#include
le reste, ou aucun et déclarer tout ce dont il a besoin comme extern
?
Le raisonnement derrière la question est le même que ci-dessus : Je ne veux pas de surprises en incluant des fichiers .h
.
Aussi, si j'ai raison, est-ce une erreur courante ? Je veux dire dans la programmation du monde réel et dans les projets "réels" qui existent.
Merci.
3 votes
stackoverflow.com/questions/1265039/using-std-namespace
3 votes
En tant que note complémentaire, si vous rencontrez des collisions de noms en raison des déclarations
using namespace
, vous pouvez utiliser le nom entièrement qualifié pour résoudre le problème.