2012-08-15 5 views
6

Mögliche Duplizieren:
Why is 'using namespace std;' considered a bad practice in C++?Stil und Namespaces

ich einige Code-Beispiele gesehen haben, wo die Menschen nutzen, sagen wir, std::cout während in anderen Orten Menschen using namespace std; an der Spitze haben für Einfachheit stattdessen. Was wird generell bevorzugt?

+2

Eine andere Alternative ist 'using std :: cout'. – hmjd

+6

[Warum wird 'using namespace std;' als eine schlechte Praxis angesehen?] (Http://stackoverflow.com/questions/1452721/why-isusing-namespace-std-considered-a-bad-practice-in-c) – chris

+3

Wenn Sie eine einfache Regel haben wollen: Verwenden Sie 'using' Direktiven niemals (zB' using namespace abc; '); Verwenden Sie 'using' Deklarationen (z. B.' using Base :: foo') nur zum Freigeben und zur ADL-Steuerung. Verwenden Sie Namespace-Aliase, um den Quellcode sauber zu halten. –

Antwort

3

Verwenden std::cout jede mögliche zu vermeiden Namenskonflikte. Wenn Sie using namespace std; verwenden, füllen Sie Ihren globalen Namespace mit dem gesamten std-Namen, der in Konflikt mit Klassen- oder Funktionsnamen stehen könnte, die Sie oder jemand anderes in Ihrem Team geschrieben hat. Dies erklärt sich auch in der C++ faq lite und in SO

2

Ich persönlich benutze die vollständige Namespace Nennwert beim Schreiben von Code, z. std::string usw. Es macht die Dinge klarer für jeden, der liest, welche Funktion der Entwickler verwenden möchte.

Ich habe das sagen folgendes gesehen:

schreiben Sie es einmal, es tausendmal lesen ...

:)

0

erste Notiz, die Sie nieusing namespace in einem Header sollte - Sie bereits dessen bewusst sein kann. Der Grund ist, dass es die using in alle Quelldateien bringt, die es enthalten.

Selbst auf der Quelldatei Ebene bevorzuge ich explizit Standard Bibliothek Funktionen und Klassen zu qualifizieren liek std::cout. In einigen Fällen verwende ich jedoch eine bestimmte Verwendung anstelle der Bequemlichkeit (z. B. using std:endl). Generell bevorzuge ich die explizite Qualifikation.