D'autres personnes m'ont dit qu'écrire " en utilisant l'espace de noms std " dans le code est une erreur, et que je devrais plutôt utiliser directement " std::cout " et " std::cin ".
Pourquoi "utiliser l'espace de noms std;" est-il considéré comme une mauvaise pratique ? Est-ce inefficace ou risque-t-on de déclarer des variables ambiguës (variables qui partagent le même nom qu'une fonction dans l'espace de noms
std`) ? A-t-elle un impact sur les performances ?
Cela n'est pas du tout lié aux performances. Mais considérez ceci : vous utilisez deux bibliothèques appelées Foo et Bar :
using namespace foo;
using namespace bar;
Tout fonctionne bien, et vous pouvez appeler Blah()
de Foo et Quux()
de Bar sans problèmes. Mais un jour, vous passez à une nouvelle version de Foo 2.0, qui propose maintenant une fonction appelée Quux()
. Vous avez maintenant un conflit : Foo 2.0 et Bar importent tous deux Quux()
dans votre espace de noms global. Cela va demander un certain effort pour le résoudre, surtout si les paramètres de la fonction correspondent.
Si vous aviez utilisé foo::Blah()
et bar::Quux()
, l'introduction de foo::Quux()
aurait été un non-événement.
Une autre raison est la surprise.
Si je vois cout << blah
, au lieu de std::cout << blah
, je pense : Qu'est-ce que ce cout
? Est-ce le cout
normal ? Est-ce quelque chose de spécial ?
Il s'agit de gérer la complexité. L’utilisation de l’espace de noms va attirer des choses que vous ne voulez pas, et donc peut-être rendre le débogage plus difficile (je dis bien peut-être). Utiliser std: : partout est plus difficile à lire (plus de texte et tout ça).
Les chevaux de course - gérez votre complexité comme vous le pouvez et comme vous vous en sentez capable.