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.1 Stimmen
@sh- Warum meinen Sie, dass es "besonders schlecht" ist, "using namespace std" zu verwenden?
22 Stimmen
@Jon: Es hat nichts mit dem Namespace std im Besonderen zu tun. Meine Betonung lag auf "in Dateigröße in Header-Dateien". Um es als Ratschlag zu formulieren: Verwenden Sie "using namespace" (std oder andere) nicht im Dateisystem von Header-Dateien. Es ist OK, es in Implementierungsdateien zu verwenden. Entschuldigung für die Zweideutigkeit.
11 Stimmen
Es wird nur in Kopfzeilen als schlechte Praxis angesehen. In Quelldateien, die nicht anderweitig eingebunden sind (z. B. cpp-Dateien), ist es in Ordnung. Siehe @mattnewport 's Antwort unten. stackoverflow.com/a/26722134/125997
3 Stimmen
Ich habe den anderen keine Antwort hinzuzufügen, aber ich benutze:
using [namespace]::[identifier];
im lokalen Bereich von relativ einfachen Quelldateien. Wenn ich zum Beispiel einen Header habe, der häufig die voll qualifizierte:std::size_t
Typ, werde ich normalerweise vorangestellt:using std::size_t;
zur Umsetzung. Dies vereinfacht Lesen den Code und wirkt sich nur auf den lokalen Bereich aus - das heißt:using std::[identifier];
verwendet die Prinzip der geringsten Überraschung . Es gibt zu viele Bezeichner in derstd
Namespace, den man im Auge behalten muss. Spätere C++-Revisionen können Bezeichner hinzufügen, die mit Ihren eigenen kollidieren!0 Stimmen
Das macht Ihren Code einfacher.
0 Stimmen
>Warum ist das so? Weil die Leute in manchen Bereichen nichts wirklich zu tun haben und anfangen, über Dinge zu debattieren, die nicht wichtig sind. In der Sprache C++ können Sie jede Strategie verwenden, aber bitte verstehen Sie die using-directive und die using-declaration.