web-dev-qa-db-fra.com

Quelle est l'utilisation de "using namespace std"?

Quelle est l'utilisation de using namespace std?

J'aimerais voir une explication en termes de Layman.

58
Jarvis
  • sing: Vous allez l'utiliser.
  • namespace: Pour utiliser quoi? Un espace de noms.
  • std: Espace de noms std (où sont déclarées les fonctionnalités de la bibliothèque standard C++, telles que string ou vector.).

Après avoir écrit cette instruction, si le compilateur voit string, il saura que vous faites peut-être référence à std::string, et s'il voit vector, il saura que vous faites peut-être référence à std::vector. (Pourvu que vous ayez inclus dans votre unité de compilation les fichiers d'en-tête où ils sont définis, bien sûr.)

Si vous ne l'écrivez pas , lorsque le compilateur verra string ou vector, il ne saura pas à quoi vous faites référence. . Vous devrez lui indiquer explicitement std::string ou std::vector, et si vous ne le faites pas, vous obtiendrez une erreur de compilation.

83
Daniel Daranas

Lorsque vous appelez using namespace <some_namespace>;, tous les symboles de cet espace de noms deviennent visibles sans ajouter le préfixe d'espace de nom. Un symbole peut être par exemple une fonction, une classe ou une variable.

Par exemple. si vous ajoutez using namespace std;, vous ne pouvez écrire que cout au lieu de std::cout lors de l'appel de l'opérateur cout défini dans l'espace de nommage std.

Ceci est quelque peu dangereux car les espaces de noms sont destinés à éviter les conflits de noms et en écrivant using namespace vous épargnez du code, mais vous perdez cet avantage. Une meilleure alternative consiste à utiliser uniquement des symboles spécifiques, les rendant ainsi visibles sans le préfixe d'espace de nom. Par exemple:

#include <iostream>
using std::cout;

int main() {
  cout << "Hello world!";
  return 0;
}
28
Ivaylo Strandjev