Nutzung von using namespace std;
-
@Tyrdal sagte in Nutzung von using namespace std;:
@Columbo sagte in Nutzung von using namespace std;:
Im Gegensatz zur hier oft apodiktisch vertretenen Meinung, dass ein globales
using namespace std;universell schwachsinnig ist und nur von Anfängern und Juergen Wolf eingesetzt wird, habe ich in professionellem Umfeld zu schätzen gelernt, dass selbst in riesigen Projektenstdin zentralen Headern geöffnet wird. Es ist in der Praxis wirklich einfach unproblematisch. Ich würde es definitiv nicht in einer Bibliothek machen, da man ja nicht seine Idiome auf den User zwingen will, aber in einem eigenen Projekt ist es kein Thema.Tja nö, es ist eben nicht generell unproblematisch. Bekanntestes Beispiel: max unter Windows.
Ich verstehe gar nicht, was Dein Argument sein soll.
std::maxwird gerade nicht funktionieren weilmaxein Makro ist.NOMINMAXist quasi obligatorisch. Haetten sie max als Funktion deklariert, dann wäreusing namespace std;kein Problem, weil die STL Version als Funktionstemplate per overload resolution korrekt differenziert werden wuerde.
-
@Columbo
Naja das Problem ist...
Mitusing namespace std;funktioniertmax(). Wenn man dann zusätzlichWindows.hohneNOMINMAXreinholt ... dann funktioniert das in den meisten Fällen immer noch. Nur nicht gleich, weil dann das zurückgegebene Argument mehrmals ausgewertet wird. Und der Typ des Ausdrucks ist denke ich auch anders.Ohne
using namespace std;muss manstd::maxschreiben. Und da bekommt man mitWindows.h(ohneNOMINMAX) dann wenigstens einen Fehler beim kompilieren.
-
@hustbaer Ich habe postuliert "Namespaces ausschütten ist böse in Libs, aber ok in eigenen Projekten".
WinAPI schiesst voll daneben indem es Makros mit extrem simplen und oft verwendeten Namen definiert. Das ist doof, und die wichtigste Schlussfolgerung ist, dass der Entwickler unbedingt
NOMINMAXdefinieren muss—using namespacehin oder her,min/maxals Makros ist purer Zirkus.using namespace std;ist da nebensächlich.
-
@Columbo
Bezüglichusing namespace std;in eigenen (non-Library) Projekten... also "OK" ist es schon, ich würde es aber nicht unbedingt haben wollen. Kommt wahrscheinlich drauf an was man gewohnt ist und auch wie man seine lokalen Bezeichner benennt.Was den Rest angeht: Klar, sehe ich auch so. Ich wollte nur erklären wie
using namespace std;in Kombination mitWindows.hzu einem Problem führen kann.
-
Abgesehen von den Problemen mit using namespace, finde ich es subjektiv mittlerweile tatsächlich besser, wenn z.B. std::string oder std::vector dransteht, und nicht einfach nur string oder vector. Das ist irgendwie viel griffiger und eindeutiger.
-
Geht mir genau so. Wobei ich das nie anders kannte und mir daher auch vorstellen kann dass man sich auch an einfach nur
stringundvectorgewöhnen kann.