
Może na początek zacznijmy od tego, po co wymyślono przestrzenie nazw. Otóż w dużych projektach, gdzie jeden program pisało 20 osób, zdarzało się, że dwie osoby użyły tej samej nazwy w kodzie tego programu i już dochodziło do błędów. Przestrzenie nazw powstały, aby takie sytuacje się nie zdarzały.
Przestrzeń nazwy to taki jakby zbiornik z nazwami. Każdy programista pisał we własnej przestrzeni, więc nie zdarzały się powtórzenia, tzn. być może zdarzały się, ale były w innych przestrzeniach, więc kompilator je rozróżniał.
Już spotkaliśmy się z przestrzeniami, chociaż nie byliśmy tego świadomi. Biblioteka standardowa C++ jest zdefiniowana w przestrzeni o nazwie "std". Zauważmy, że przed każdym cin i cout pisaliśmy std::
"std" to oczywiście przestrzeń nazwy, a :: to operator zasięgu, używany mdzn. przy przestrzeniach nazw. "cout" jest już dobrze znanym poleceniem, ale teraz wiemy już, że jest umieszczone w przestrzeni nazw std. Wiele bibliotecznych(dołączanych z pliku) elementów języka C++ jest umieszczone w tej przestrzeni.
Pisanie std przed każdą nazwą jest dość uciążliwe, dlatego możemy sobie zdefiniować użycie przestrzeni nazw, spójrzmy na przykład:
using namespace to zdefiniowanie używania przestrzeni, od tej pory nie musimy uzywać operatora zasięgu(::) przed poleceniami w tej przestrzeni.
Możliwe jest także zdefiniowanie używania tylko jednego z poleceń danej przestrzeni, dla przykładu zdefiniujmy używanie tylko cout z przestrzeni std.
Możemy utworzyć swoją własną przestrzeń nazw, spójrzmy na przykład:
Definiowanie nowe przestrzeniu powinniśmy zacząć od wyrazu namespace, następnie nazwa przestrzeni i w klamrach ciało przestrzeni. Wszystko co napiszemy pomiędzy klamrami będzie w tej przestrzeni. Aby użyć czegoś z przestrzeni(w naszym przypadku funkcji) na zewnątrz tej przestrzeni(w naszym przypadku w funkcji main), musimy odwoływać się przez opearotr ::, co widzimy na przykładzie. Oczywiście możemy definiować uzycie(using namespace) naszej przestrzeni itd.