Resource icon

Warum kein using namespace im Header?

Programmiersprache(n)
C++
using namespace std; - diese Zeile steht wohl in so ziemlich jedem Anfängercode.

Warum? Ist es reine Faulheit? Ganz werden wir es wohl nie ergründen können. So oder so, es gibt eine Stelle, in denen ein using namespace definitiv nicht stehen soll: in einer Header-Datei!

Das inkludieren von Header-Dateien stellt nicht bloß einfach die darin deklarierten Klassen, Funktionen und Variablen bereit, sondern kopiert den gesamten Text roh in die inkludierende .cpp-Datei. Jede Anweisung wie ein using namespace (oder auch beispielsweise Makros) sind damit nicht nur in der Headerdatei gültig, sondern auch in der .cpp, von der er aufgerufen wird.

Wer jetzt denkt "das ist doch gar nicht so schlimm", der hat scheinbar noch an keinem größeren Projekt gearbeitet. Ein using namespace im Header führt den ganzen Sinn von namespaces ad absurdum - dann könnten die std::-Header ja auch gleich ein using namespace std; im Header stehen haben, dann kann man sich das ganze std:: sparen - ja, aber man kann auch keine Klasse, Variable, Funktion mehr namens map, vector, string, max, find, ... anlegen - denn die gibt es ja schon. Logischerweise könnte man auch keine zwei Bibliotheken gleichzeitig verwenden, außer, sie benutzen rein zufällig nicht dieselben Namen.

Also, kein using namespace im Header, denn sonst macht man seinen Code für andere Leute potentiell unbenutzbar. Und wenn man im Header schon std::string schreiben muss, warum in der .cpp damit anfangen...?

"Aber niemand sonst inkludiert meine Header-Dateien, ich schreibe keine Middleware" - klar, man kann seinen Code natürlich gleich so auslegen, dass ihn niemand sonst verwenden kann. Damit kommt man aber nicht weit. Jeder Firma in der ich bisher gearbeitet habe (und die Coding-Guidelines hatte) hat logischerweise "kein using namespace im Header!" aufgeführt.

Es trotzdem zu schreiben, zeigt eigentlich nur, dass einem die 5 Sekunden, die man sich beim schreiben spart, wichtiger sind als potentielle Mitarbeiter, Kunden oder Problemlöser - damit findet man aber weder Job noch Freunde.
Autor
-AB-
First release
Last update
Bewertung
5,00 Stern(e) 2 Bewertungen

More resources from -AB-

Latest reviews

Volle Zustimmung
Sehr richtig. Und (ohne eine Grundsatzdiskussion anzetteln zu wollen) ich bleibe dabei, dass das using namespace std; ebenso wenig in die .cpp Dateien gehört.
Oben