Man har lavet namespaces for at undgå at navne på funktioner laver konflikter. Hvis man fx selv vil lave en funktion, der hedder cout, så kan man sagtens det:
#include <iostream>
void cout()
{
std::cout << "hej" << std::endl; //Bruger cout, som ligger i namespaced std.
}
int main()
{
cout(); //bruger vores egen funktion
}
"::" er en scope-operator. Den bruger man til at få fat i de funktioner der fx ligger i et namespace.
Hvis jeg nu lavede mit eget namespace:
namespace test{
void hej(){/*Funktionens definition her..*/}
}
Når jeg så skal bruge hej, skal jeg skrive test::hej().
Så er der jo også using namespace std;. Når man skriver det, bliver alt der er i namespacet std globalt, og så kan man ikke længere lave sine egen funktioner der fx hedder cout. Jeg har dog aldrig haft brug for at lave en funktion, der hed det samme som dem i std, så bare brug using namespace std, det er nemmest...
Hvis man bare vil bruge nogle enkelte ting fra et namespace kan man skrive sådan her:
#include <iostream>
using std::cout;
int main()
{
cout << "hej med dig" << std::endl;
}
using std::cout gør det samme som using namespace std, bare kun for cout. Derfor er cout nu global, og jeg behøver ikke skrive std:: foran den. endl er ikke global, og den skal stadig tilgås med std::.