3261 Stimmen

Warum wird "using namespace std;" als schlechte Praxis angesehen?

Ich habe von anderen gehört, dass das Schreiben using namespace std; im Code falsch ist, und dass ich Folgendes verwenden sollte std::cout y std::cin stattdessen direkt.

Warum ist using namespace std; eine schlechte Praxis? Ist es ineffizient oder besteht die Gefahr, dass mehrdeutige Variablen deklariert werden (Variablen, die denselben Namen haben wie eine Funktion in std Namespace)? Wirkt sich das auf die Leistung aus?

710 Stimmen

Vergessen Sie nicht, was Sie tun können: "using std::cout;", was bedeutet, dass Sie nicht std::cout eingeben müssen, aber nicht gleichzeitig den gesamten std-Namensraum mit einbeziehen.

115 Stimmen

Es ist besonders schlecht, 'using namespace std' in Headerdateien im Dateisystem zu verwenden. Die Verwendung in Quelldateien (*.cpp) im Dateisystem nach allen Includes ist nicht ganz so schlimm, da ihre Wirkung auf eine einzige Übersetzungseinheit beschränkt ist. Noch weniger problematisch ist die Verwendung innerhalb von Funktionen oder Klassen, da die Wirkung auf den Funktions- oder Klassenbereich beschränkt ist.

15 Stimmen

Ich würde davon abraten, die using-Direktive zu verwenden, aber für bestimmte Namespaces wie std::literals::chrono_literals , Poco::Data:Keywords , Poco::Units und andere Dinge, die mit Literalen oder Lesbarkeitstricks zu tun haben. Immer dann, wenn es in Header- oder Implementierungsdateien steht. In einem Funktionsbereich mag es in Ordnung sein, aber abgesehen von Literalen und anderen Dingen ist es nicht nützlich.

-3voto

uuu777 Punkte 659

Solange Sie in den Headerdateien nicht "using namespace std" verwenden, sollte dies völlig normal sein.

Wenn es Namenskonflikte mit z. B. boost gibt, dann verwenden Sie diese Anweisung nicht in der spezifischen .cpp-Datei, aber Sie ersparen allen anderen die Augen und Finger, indem Sie nicht in jeder Zeile in anderen Dateien zehnmal "std::" wiederholen.

Leider ist dies nun eine rein religiöse Angelegenheit, und es ist für alle einfacher/produktiver, dem etablierten Muster zu folgen und "std::" immer wieder zu wiederholen.

0 Stimmen

"eine rein religiöse Angelegenheit" abgesehen von all den sehr praktischen Gründen, die in vielen anderen Antworten genannt wurden... Zumindest sollte diese Antwort zusätzlich Lösungen für die Probleme bieten, wie z.B. dass der std-Namensraum mit neuen C++-Standardversionen neue Symbole erhält.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X