C++ - using namespace std

a marqué ce sujet comme résolu.

Salut,

using namespace sert simplement à faire un raccourci dans les noms, rien de plus. L’utiliser ou non est affaire de choix. Personnellement, je n’utilise jamais les using namespace car je trouve le code plus clair quand on sait d’où viennent les symboles utilisés.

Pour être plus précis, using namespace X sert à dire au compilateur "quand tu recherche un identifiant, regarde aussi dans l’espace de noms X`.

Pour illustrer :

#include <iostream>

namespace A {
void foo() {}  // 1
}

void foo() {}  // 2

int main() {
    foo();
}

Dans ce code, le compilateur regarde dans l’espace de noms général (::) et trouve que le second foo.

Avec using namespace :

Pour illustrer :

#include <iostream>

namespace A {
void foo() {}  // 1
}

void foo() {}  // 2

using namespace A;

int main() {
    foo();
}

Dans ce second code, le compilateur regarde dans l’espace de noms général (::) ET dans l’espace de noms A. Il trouve donc 2 fonctions foo et il ne sait pas laquelle utiliser. Il y a donc une erreur de compilation.

prog.cc:12:5: error: call to 'foo' is ambiguous
    foo();
    ^~~

Donc pourquoi using namespace est déconseillé ?

  • parce que ca fait des ambiguïtés s’il y a plusieur candidats
  • parce que le code est moins explicite (si tu veux appeler la fonction cout de l’espace de noms std, écrit explicitement que tu veux utiliser std.)
  • en termes d’apprentissage, c’est préférable que tu apprenne quand tu utilise une fonctionnalité de std ou pas. A force d’utiliser using namespace std, certains ne savent plus d’où vient les fonctionnalités qu’ils utilisent.
+5 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte