De plus, la directive "using namespace" est considérée comme une mauvaise pratique. Soit tu qualifies pleinement tes appels de fonctions, soit tu ne sélectionne que ce dont tu as besoin. Exemples:
int main()
{
std::cout << "Hello world." << std::endl;
return 0;
}
int main()
{
using std::cout;
using std::endl;
cout << "Hello world." << endl;
return 0;
}
Tu peux très bien avoir besoin d'un namespace sans avoir à faire 40 using.
Le problème la c'est d'importer toute la lib dans le scope global, mais using namespace n'est pas une mauvaise pratique. Il faut juste s'en servir correctement.
Tu peux très bien avoir besoin d'un namespace sans avoir à faire 40 using.
Le problème la c'est d'importer toute la lib dans le scope global, mais using namespace n'est pas une mauvaise pratique. Il faut juste s'en servir correctement.
La mauvaise pratique c'est using namespace std; C'est pas pareil.
Que ce soit l'espace de nom standard ou pas, cela revient au même.
Pour être plus précis, c'est importer un espace de nom dans la portée globale qui est réprimandable. Dans une fonction (donc en local), on assume que le programmeur sais ce qu'il fait. Dans la portée globale, c'est une toute autre histoire, du simple fait que plusieurs collaborateurs peuvent travailler sur un même projet, et c'est la que les conflits de nom peuvent survenir.
Ton exemple est justement le mauvais exemple, tu importes un espace de nom dans la portée d'une fonction, et ce n'est pas non plus l'erreur que l'on reproche.
Importer des symboles spécifiques et tout une librairie ça revient au même ? Pourquoi s'embêter à faire un namespace pour std::chrono::literals par exemple autant importer std à chaque fois si c'est pareil.
Que ce soit local à un fichier ou à une fonction ça ne change pas grand chose, tant que ce n'est pas un header.
Je vois pas en quoi l'exemple est mauvais vu que j'ai dis que le problème n'était pas "la directive using namespace" mais les symboles qu'on importe et dans quel scope.
Importer des symboles spécifiques et tout une librairie ça revient au même ? Pourquoi s'embêter à faire un namespace pour std::chrono::literals par exemple autant importer std à chaque fois si c'est pareil.
Non, c'est importer un espace de nom (quel qu'il soit) dans l'espace global qui est une mauvaise pratique. Ce n'est pas spécifique à l'espace de nom std.
ads00 a écrit:
Je vois pas en quoi l'exemple est mauvais vu que j'ai dis que le problème n'était pas "la directive using namespace" mais les symboles qu'on importe et dans quel scope.p>
Au risque de me répéter: "Dans une fonction (donc en local), on assume que le programmeur sais ce qu'il fait."
Sur une fonction il sait ce qu'il fait mais dans le scope d'un fichier il ne sait pas ce qu'il fait ?
Enfin bon vu que les mauvaises pratiques changent à chaque messaege, je m'arrête la.
Ca n'a jamais changé. J'ai commencé a venir ici y'a comme 8 ans et c'etait la meme histoire : pas de using global. Et en global il peut penser savoir ce qu'il fait mais n'est jamais a l'abris des mauvaise surprises .. comme 2 type portant le meme nom dans 2 namespace différent ..
Erreur constructeur de classe
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
De plus, la directive "using namespace" est considérée comme une mauvaise pratique.