using std? = nicht professionell (Umfrage)
-
@Nathan
Ich verstehe nicht ganz wieso ADL ein Hack sein soll.
ADL macht mMn. schon Sinn.
Ohne ADL müsste man tonnenweiseusing/using namespaceschreiben nur um Operatoren verwenden zu können. Fände ich nicht so gut.Das Problem sehe ich weniger bei ADL, sondern eher bei den Overload Resolution Regeln.
Wenn man einen "ambiguous" Fehler bekäme, sobald mögliche Kandidaten in mehreren Namespaces gefunden werden (egal wie "gut" die jeweils besten Kandidaten aus den verschiedenen Namespaces "passen"), wäre das von dir gezeigte Beispiel kein Problem.
Und auf die Schnelle fällt mir auch kein Beispiel ein, wo diese Regel mit vernünftigem Code einen Fehler verursachen würde.Diese Regel nachträglich einzuführen wäre vermutlich trotzdem etwas krass, da u.U. sehr viel "unvernünftiger" Code existiert, der dann auf einmal nicht mehr kompilieren würde.
-
hustbaer schrieb:
@Nathan
Ich verstehe nicht ganz wieso ADL ein Hack sein soll.Weil ADL nachträglich eingefügt wurde und ein Loch in namespaces schafft. namespaces sollten keine Namen freigeben, ADL ist eine nachträgliche Veränderung, die ein Backdoor schafft -> ein Hack.
@otze:
Ok, Missverständnis. In der Hinsicht ist das schon gut, dass ADL nätig wurde,um Namen freizugeben, denn das zeigt, dass das System funktioniert. Allerdings ist das trotzdem nicht ganz richtig, dass das nötig ist, um so grundlegende Features zu unterstützen.
-
Nathan schrieb:
hustbaer schrieb:
@Nathan
Ich verstehe nicht ganz wieso ADL ein Hack sein soll.Weil ADL nachträglich eingefügt wurde und ein Loch in namespaces schafft. namespaces sollten keine Namen freigeben, ADL ist eine nachträgliche Veränderung, die ein Backdoor schafft -> ein Hack.
Ich würde mal behaupten dass das Ansichtssache ist.
-
hustbaer schrieb:
@Mr.Long
Sorry,using namespace.Also du verwendest Namespaces um Namenskonflikte zu vermeiden, holst dann 100 Namespaces mit
using namespacerein, verwendest Klassen aus diesen 100 Namespaces und bekommst dann trotzdem keine Namenskonflikte.
Sehr interessant.EDIT: Bei "bekommst trotzdem keine Namenskonflikte" meine ich dass du keine "ambiguous name" Fehler beim Kompilieren bekommst.
Nicht Fehler beim Linken o.ä. weil die "fully qualified names" unterschiedlich wären. Letzteres ist natürlich durch die Verwendung von Namespaces sichergestellt, das ist mir schon klar. (Vorausgesetzt die Namespaces der einzelnen Module/Libraries sind alle unterschiedlich, aber das ist sowieso Voraussetzung dafür dass Namespaces überhaupt irgendwas bringen.)Ich verstehe nicht was du von mir willst. Vielleicht solltest du mal meine Antwort nochmal durchlesen.
Man kann halt nicht alles haben.
-
Edit: die antwort muss noch verfeinert werden.
-
@Mr.Long
Ja, du hast Recht.
Ich hab mir mal wieder zu wenig Zeit genommen und etwas gelesen was gar nicht dasteht.
Sorry.Ja, wenn du 100 Klassen aus nur einem Namespace brauchst, dann ist
using namespacevermutlich OK. Und wird auch nicht zu Namenskonflikten führen.
-
ich benutze 'using namespace' meist für std::placeholders (EDIT2: Die ja ein wenig aus der Mode sind), C++14 predefined literals und boost krams. EDIT: und eigenes im kleinen scope.
den standard hole ich mir (fast?) nie komplett.
ich habe nichts dagegen std::vector und std::string zu schreiben. Ich finde es auch irgendwie besser lesbar...EDIT3: using namespace XYZ; in einem Header wiederum halte ich für eine Straftat
-
Inwiefern sind std::placeholders aus der Mode?
-
crazyyzarc schrieb:
Hey,
mir wurde erklärt, wiederholte mal erklärt das:
using namespace std;kein professionelles Programmieren ist - was haltet ihr davon? Wie macht ihr das?
Pros verwenden auf keinen Fall using, i++, delete und if-schleifen.
-
ImbaProProgger schrieb:
crazyyzarc schrieb:
Hey,
mir wurde erklärt, wiederholte mal erklärt das:
using namespace std;kein professionelles Programmieren ist - was haltet ihr davon? Wie macht ihr das?
Pros verwenden auf keinen Fall using, i++, delete und if-schleifen.
Nein, das ist wie in der Kirche. Die Pros predigen, diese Dinge niemals nicht zu tun, aber dann tun sie es heimlich doch, wenn keiner zuguckt und reden sich ein, dass sie schließlich verantwortungsvoll damit umgehen können.
-
Du verwendest
delete? Das wirft ja ein ganz neues Licht auf dich
-
Nach meiner Erfahrung ist "using namespace std" sehr professionell. Auch im Header. Im professionellen Bereich wird Code zusammengefrickelt bis es funktioniert. Sollte dann doch mal guter Code in der Produktion landen, wird es so lange kaputt gepflegt, bis niemand Bereit ist, für die kleinste Änderung Verantwortung zu übernehmen. "using namespace std" hilft, Code unwartbar zu machen. Ist keine grosse Hilfe, aber doch ein Schritt in die Richtung.
-
AntiSepp schrieb:
Du verwendest
delete? Das wirft ja ein ganz neues Licht auf dich
Ne, er verwendet es ja nur im Dunkeln.
-
Bei kurzen namespaces wie "std", "sf" oder vielleicht auch "OpelPopel", die nicht über eine gewisse Wortlänge hinausreichen und nicht unübersichtlich sind, würde ich nie using namespace benutzen.
Bei bibliotheken wie z.B. Boost, wo es lange namespaces gibt, benutze ich es hingegen.
-
Trampeltier schrieb:
Bei bibliotheken wie z.B. Boost, wo es lange namespaces gibt, benutze ich es hingegen.
Dafür sind allerdings namespace aliase da.
-
camper schrieb:
Trampeltier schrieb:
Bei bibliotheken wie z.B. Boost, wo es lange namespaces gibt, benutze ich es hingegen.
Dafür sind allerdings namespace aliase da.
+1 dafür.
Das Feature scheint oft übersehen zu werden.
-
Arcoth schrieb:
Inwiefern sind std::placeholders aus der Mode?
std::placeholders + std::bind: wegen lambdas.
EDIT: aber ich denke das könnte sehr leich in eine offtopic diskussion ausarten

-
crazyyzarc schrieb:
Hey,
mir wurde erklärt, wiederholte mal erklärt das:
using namespace std;kein professionelles Programmieren ist - was haltet ihr davon? Wie macht ihr das?
Hey, wer hat dir das den erklärt? Es hat nichts mit professionel o. unprofessionel zu tun, sondern, mit Effektivität - mit besserer Wartbarkeit!
Es gibt tausende professionelle (was für ein Wort!) Programmierer die "using namespace std;" vorschlagen und nutzen ,sogar Stroustrup, aber dieser gewisser "Er" will die alle in Frage stellen? Den will ich sehen.
lg
Sandor++
-
cooky451 schrieb:
AntiSepp schrieb:
Du verwendest
delete? Das wirft ja ein ganz neues Licht auf dich
Ne, er verwendet es ja nur im Dunkeln.
Dein Ernst?
5cript schrieb:
Arcoth schrieb:
Inwiefern sind std::placeholders aus der Mode?
std::placeholders + std::bind: wegen lambdas.
Es gibt genug Leute die nach wie vor
bindverwenden. E.g. wenn mit Code von prä-C++11 gearbeitet wird, mag man nicht alleboost::binds durch Lambdas ersetzen, aber dasboostzustdzu ändern ist durchaus praktikabel, vor allem um die Abhängigkeit zu verlieren.EDIT: aber ich denke das könnte sehr leich in eine offtopic diskussion ausarten

Und inwiefern rechtfertigt das einen skeptischen Smiley?
-
Arcoth schrieb:
cooky451 schrieb:
AntiSepp schrieb:
Du verwendest
delete? Das wirft ja ein ganz neues Licht auf dich
Ne, er verwendet es ja nur im Dunkeln.
Dein Ernst?
Langsam sollte es dir aber dämmern

(Keine Beleidigung ich wollte nur bei den Beleuchtungswortspielen mitmachen, vielleicht finden sich ja noch mehr :),
falls jemanden also ein Licht aufgehen sollte nur her damit... )