2017-01-25 5 views
3

Stimmen Sie zu, dass using namespace XXX keine gute Praxis ist. Voranstellen namespaces:: in jedem Anruf ist jedoch nicht nur mühsam, sondern manchmal auch irritierend. beispielsweise den Code anschauen, unter dem Standard-Namespace stdVerwenden von Namespace :: Funktion ist besser als Präfix Namespace :: in jedem Aufruf?

#include <iostream> 

int main() 
{ 
    std::cout << "Hello World" << std::endl; 
    return 0; 
} 

jedoch verwendet, kann ich von std:: Wiederholung von nur die Funktion selbst über using Stichwort Import als

#include <iostream> 
using std::cout; 
using std::endl; 
int main() 
{ 
    cout << "Hello World" << endl; 
    return 0; 
} 

loszuwerden Gibt es eine spezifischer Grund, warum ich das nicht tun sollte, anstatt std :: in allen Aussagen voranzutreiben. Wenn es keinen bestimmten Grund gibt, warum wird dieser Ansatz nicht als Präfix std:: vorangebracht?

Ich verstehe aus C++ - Spezifikation, dass using std::func auch überladene Definition importieren wird.

+0

http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice – ashiquzzaman33

+0

IMHO können Sie es zu Testzwecken verwenden. – ashiquzzaman33

Antwort

4

Der Hauptgrund für Namespace-Qualifikation ist, dass es Namenskollision, wie ein lokaler Name mit std::distancedistance Kollision vermeidet.

Der Hauptgrund für die Vermeidung von Qualifikation ist, dass der Code dann kürzer ist, und für einige Programmierer (einschließlich mir) erscheint dann klarer, weil es nur Englisch liest.

Das Problem mit Namenskollisionen steigt mit der Größe des Codes, und das ist ein Kriterium: Je kürzer der Code, desto weniger sinnvoll ist es, Overhead hinzuzufügen, um Namenskollisionen zu vermeiden. Und umgekehrt, je größer die Codebasis ist und je länger es dauert, um zu bauen, desto mehr Grund gibt es, Namenskollisionen zu vermeiden.

Eine Hauptregel:

Nicht immer eine Decke using namespace... im globalen Namespace in einer Header-Datei hinzuzufügen.

Aber abgesehen davon, dass es eine so Engineering Entscheidung genannt: Gehen Sie mit Ihrem Darm über Vorteile und Kosten und Hässlichkeit und Lesbarkeit und Klarheit Gefühl, und so weiter.

0

Ob Sie

using namespace std; 

oder

using namespace std::cout; 
using namespace std::end; 

spielt keine große Rolle, wenn es in einer CPP-Datei ist. Eventuelle Namenskonflikte können lokal behoben werden.

Die Opposition zu ihrer Verwendung ist sehr stark, wenn es um Header-Dateien geht.

Ich würde nicht zu viele Sorgen um entweder Ansatz in einer CPP-Datei

Verwandte Themen