Um Ihre Frage zu beantworten, betrachte ich es praktisch so: Viele Programmierer (nicht alle) berufen sich auf den Namensraum std. Daher sollte man sich angewöhnen, KEINE Dinge zu verwenden, die den gleichen Namen wie der Namensraum std haben oder verwenden. Das ist zugegebenermaßen viel, aber nicht so viel im Vergleich zu der Anzahl der möglichen zusammenhängenden Wörter und Pseudonyme, die man sich ausdenken kann, um genau zu sein.
Ich meine wirklich ... sagen "verlassen Sie sich nicht darauf, dass dies vorhanden ist" ist nur die Einrichtung Sie verlassen sich auf es NICHT vorhanden ist. Sie werden ständig Probleme haben, wenn Sie Code-Schnipsel ausleihen und sie ständig reparieren. Halten Sie einfach Ihre benutzerdefinierten und geliehenen Sachen in begrenztem Umfang, wie sie sein sollten, und seien Sie SEHR sparsam mit Globals (ehrlich gesagt sollten Globals fast immer der letzte Ausweg sein, um "jetzt kompilieren, später vernünftig sein"). Ich glaube wirklich, dass es ein schlechter Rat von Ihrem Lehrer ist, weil die Verwendung von std sowohl für "cout" als auch für "std::cout" funktioniert, aber die NICHT-Verwendung von std funktioniert nur für "std::cout". Sie werden nicht immer das Glück haben, Ihren gesamten Code selbst zu schreiben.
HINWEIS: Konzentrieren Sie sich nicht zu sehr auf Fragen der Effizienz, bis Sie ein wenig über die Funktionsweise von Compilern gelernt haben. Mit ein wenig Erfahrung im Programmieren müssen Sie nicht viel über sie lernen, bevor Sie erkennen, wie sehr sie in der Lage sind, guten Code in etwas Einfaches zu verallgemeinern. Genauso einfach, wie wenn Sie das Ganze in C geschrieben hätten. Guter Code ist nur so komplex, wie er sein muss.
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.