Quelle est la relation entre iostream et l'espace de noms std?

Je suis actuellement en utilisant apprendre par Vous-même en C++ en 21 Jours, Deuxième Édition livre pour apprendre le C++, le long de avec Microsoft Visual C++ 2010 Express. À la fin du Chapitre 1, il y a un petit exercice sur l'écriture et la compilation le code suivant:

#include <iostream>

int main ()
{
    cout << "Hello World!\n";
    return 0;
}

Assez simple, non? Cependant, à ma grande surprise, le code ne compile pas, à cause de cette erreur:

error C2065: 'cout' : identificateur non déclaré

J'ai commencé à récurer le Web, et bientôt trouvé quelques solutions ici. S'avère que j'avais à ajouter
using namespace std; de mon code!

Cependant il n'y avait aucune mention des espaces de noms dans le livre, alors j'ai pensé que le livre est obsolète. (Il utilise #include <iostream.h> pré-processeur de la directive!) Après quelques recherches sur le Web, j'ai trouvé beaucoup d'informations sur les espaces de noms, namespace std, avec un certain historique sur <iostream.h> et <iostream>, et tout ce flux de nouvelles informations est assez confus pour moi. (Sans parler de tous les inutiles résultats de Google sur les Mst...)

Voici donc quelques questions que j'ai eu jusqu'à présent:

  1. Si je suis y compris la iostream bibliothèque, pourquoi une namespace besoin de trouver cout? Est-il une autre cout quelque part qui pourrait provoquer un conflit de nom? Si quelqu'un pouvait fournir un schéma pour cela, ce serait sympa.

Et en bonus, quelques arrière-plan historique:

  1. Quel était exactement iostream.h avant il a été changé pour iostream?

  2. Ne namespace jouer un rôle dans ce changement?

  • Vous n'avez pas à ajouter using namespace std; à votre code. Que vous aviez à dire std::cout, ou using std::cout; à l'intérieur de main.
  • Mais pourquoi le std partie même nécessaire? Il y a plusieurs couts à l'intérieur de iostream?
  • Parce que cout est à l'intérieur de la std espace de noms.
InformationsquelleAutor IDDQD | 2014-05-11