Am besten erkläre ich erstmal was ein
Namensraum (engl. Namespace) ist und wozu er dient.
Ein Namensraum erweitert die Definition einer Funktion oder einer Variablen (innerhalb des jeweiligen Namensraum) und die Zugehörigkeit zum Namensraum.
Dies bedeutet faktisch, dass zwei Funktionen mit dem gleichen Namen existieren können, sofern sie zu unterschiedlichen Namensräumen gehören und somit Konflikte durch unterschiedliche Bibliotheken ausgeschlossen werden können, wenn beide eine Funktion mit dem gleichen Namen definieren. Da ein Entwickler nicht alle möglichen C++-Bibliotheken kennt und somit nicht alle möglichen schon verwendeten Namen von Funktionen etc. würde dies sonst sehr häufig zu Konflikten führen.
Der Namensraum der Standard-Bibliotheken von C++ hat den Namen
std (Standard).
Einen Namensraum definiert man über:
C++:
namespace osbesNamespace
{
double mul(float a, float b)
{
return a * b;
}
double add(float a, float b)
{
return a + b;
}
}
Somit gibt es im Namensraum
osbesNamespace die Funktionen
mul und
add.
Möchte man nun diesem Namensraum weitere Funktion in einer anderen Datei hinzufügen, so ändert sich an der schreibweise garnix.
C++:
namespace osbesNamespace
{
double sub(float a, float b)
{
return a - b;
}
}
Somit würde der Namensraum
osbesNamespace nun die Funktionen
mul,
add und
sub beinhalten.
Um diesen Namensraum nun zu nutzen schreibt man:
C++:
#include "Datei_wo_add_und_mul_definiert_ist.h"
#include "Datei_wo_sub_definiert_ist.h"
int main()
{
osbesNamespace::add(1, 2);
osbesNamespace::mul(1, 2);
osbesNamespace::sub(1, 2);
}
Nun kann man sich natürlich vorstellen, dass es teilweise sehr lästig werden kann jedesmal "osbesNamespace::" zu schreiben, nur um etwas aus diesem Namensraum zu nutzen, gerade wenn man es ständig benötigt. Hier kommt
using namespace ins Spiel.
Äquivalent wäre somit zu obigem Programm auch:
C++:
#include "Datei_wo_add_und_mul_definiert_ist.h"
#include "Datei_wo_sub_definiert_ist.h"
using namespace osbesNamespace;
int main()
{
add(1, 2);
mul(1, 2);
sub(1, 2);
}
Der Nachteil ist jedoch, dass dadurch sowohl für andere Programmierer bei größeren Projekten nicht mehr geklärt ist welcher Namensraum nun wo gemeint ist und es zu unabsichtlichen Fehlern kommen kann, wenn man eigentlich einen anderen Namensraum nutzen wollte.
Ich hoffe dies klärt die Frage und würde dich sonst an Google (Stichwort: Namensraum C++) und Wikipedia (Ist oben verlinkt) verweisen.