Dies ist eine modifizierte Version einer anderen Antwort, die ich zum gleichen Thema schrieb. Bis zur Version 3 jetzt.
Das Hauptproblem ist Namenskonflikte, in dem, wenn Sie eine Variable count
in Ihrem Code haben und Sie sind using namespace std;
wird es mehrdeutig sein, was Sie meinen. Es ist nicht nur count
. reverse
und equal
werden ebenfalls enthalten sein, die alle gemeinsamen Identifikatoren sind. Zum Beispiel führt dies zu einem Compiler-Fehler:
#include <algorithm>
using namespace std;
int count;
int main(int argc, char* argv[]){
count = 1;
}
alle Probleme an den Compiler Ohne Berücksichtigung, es ist auch ein Problem für jeden kommen Sie Ihren Code zu lesen. Diese zusätzlichen 5 Zeichen dafür, dass die nächste Person, die Ihr Code knowns genau beibehalten, was Sie meinen, ohne den Anfang der Datei jede zweite Zeile zu überprüfen, um zu sehen, ob Sie std::string
oder mylib::string
bedeuten, wenn Sie string
schreiben Es ist auch Beachten Sie, dass Sie nie eine using namspace xyz
in eine Header-Datei einfügen sollten, da sie auf alle Dateien übertragen werden kann, die diese Header-Datei enthalten, auch wenn sie diesen Namespace nicht verwenden möchten. Ein weiteres Problem hier ist, dass es auch nicht klar ist, dass der Namespace std importiert wurde, so der Betreuer (oder Sie in 3 Monaten Zeit) eine Variable mit dem gleichen Namen wie einige obskure Std-Funktion, die in der gleichen Kompilierungseinheit und enthalten war Dann verbringt er eine Stunde damit, die Ursache des Kompilierungsfehlers zu finden.
(Von Effective C++) In den meisten Fällen ist es sehr vorteilhaft ist
using std::swap
zu verwenden, als ob es eine spezielle Version von Swap ist, wird der Compiler, dass verwenden, sonst wird es auf std::swap
fällt zurück . Wenn Sie std::swap
aufrufen, verwenden Sie immer die Basisversion, die die spezialisierte Version nicht aufruft (selbst wenn sie existiert).
Nehmen Sie zum Beispiel Code mit der pimpl idiom. Wo als die Standardkopie alle Daten in der tatsächlichen Implementierung kopieren können, wo alles, was getan werden muss, ist das Vertauschen der Zeiger. Durch die Verwendung eines speziellen Swaps können enorme Ausführungszeit eingespart werden und gut gestaltete Bibliotheken sollten darauf spezialisiert sein.
Zusammengefasst
Immer lieber using std::swap
über std::swap()
Vermeiden using namespace std
in einem Header auf allen Kosten aufgrund der Ausbreitung, versuchen Sie es mit ihm in Implementierungsdateien zu vermeiden.
Tausende von using std::foo
an der Spitze jeder Datei ist nicht der Weg zu gehen. Verwenden Sie es höchstens für häufig verwendete Klassen.
Alles andere ist Meinung.
Dupe von http://stackoverflow.com/questions/1452721/why-isusing-namespace-std-das-betrachtete-bad-praxis-in-c unter vielen, viele andere. –
Sie haben Recht! Warum habe ich diese nicht gefunden, als ich gesucht habe? Entschuldigung – Mawg