Warum schreiben noch so viele std:: ?



  • Hallo ich habe nur ein kurze Frage, dessen Antwort ich nirgendswo finden konnte.

    Mir ist aufgefallen, dass viele std::cout oder std::endl noch benutzen in der Sprache c++ obwohl man dies mit using namespace std; nicht mehr machen müsste.

    Machen es so viele einfach aus Gewohnheit oder hat man dadurch irgendwelche vorteile ?

    Sorry für diese vielleicht dumme Frage aber ich bin noch ziemlich neu im Programmieren und konnte auf diese Frage noch keine Antwort finden.

    LG


  • Mod

    Mit using namespace hebt man halt das Konzept eines Namensraums wieder auf und somit auch alles, wozu Namensräume gut sind (Vermeidung von Namenskonflikten). Das kann lokal auch mal vertretbar sein, aber letztlich ist der Grund für ein using namespace einzig und alleine Schreibfaulheit. Und bei einem Miniprogramm fürs Forum zieht Schreibfaulheit kaum als Argument.

    Man sieht mit expliziter Namespaceangabe übrigens auch schön, was genau woher kommt, was auch ganz nützlich sein kann, wenn es darum geht, Anfängern ein selbsterklärendes Codebeispiel zu liefern.



  • In Stackoverflow findet ihr eine Diskussion zu dem Thema.

    Es gibt sicher weitere Beiträge dazu im Netz.



  • Skailer schrieb:

    obwohl man dies mit using namespace std; nicht mehr machen müsste.

    Seit es namspaces gibt, gibt es auch using. Da hat sich nichts geändert.



  • SeppJ schrieb:

    Man sieht mit expliziter Namespaceangabe übrigens auch schön, was genau woher kommt, was auch ganz nützlich sein kann, wenn es darum geht, Anfängern ein selbsterklärendes Codebeispiel zu liefern.

    👍

    lass einfach using namespace weg und nimm std:: bzw. den namespace von wo es halt kommt.

    so ist es für jeden klar nachvollziehbar von wo was kommt und was zu welchem namespace gehört!

    ps. zumindest ist das meine meinung dazu!

    lg



  • Machs im Endeffekt so wie's dir lieb ist, das Ding ist bei 100-Zeilen-Projekten eh egal.

    Mit der Zeit gewöhnt man sich daran immer "std::" davor zu schreiben und kommt wie aus der Kanone geschossen, nimmt also keine beeinträchtigende Zeit weg.

    Bei längeren Namespace-Namen wie bei boost würde ich dann doch noch lieber ein Alias auf einen Namespace machen, à la

    namespace kf = katzenfutter;
    


  • Dank Intellisense sind aber auch längere Namespaces kein Problem. Insofern gibt es das Problem quasi gar nicht.



  • It0101 schrieb:

    Dank Intellisense sind aber auch längere Namespaces kein Problem. Insofern gibt es das Problem quasi gar nicht.

    Haste schonmal ne Funktionsbindung mit allein schon zwei Placeholders gesehen?

    Das ist in einer Zeile nicht mehr anzusehen.



  • Namespaces gibt man doch nur in Header-Dateien an, damit beim inkludieren durch den User keine Konflikte entstehen.
    In der Implementierung (*.cpp) kann man ohne große Probleme using namespace verwenden. Das macht auch den Code lesbarer.



  • Artchi schrieb:

    In der Implementierung (*.cpp) kann man ohne große Probleme using namespace verwenden.

    Damit gibt es die gleichen Probleme wie im Header.

    Artchi schrieb:

    Das macht auch den Code lesbarer.

    Das ist Ansichtssache.



  • Für mich ist das eine Frage, welche mit der Unterscheidung von Headern und Sources zu tun hat. In einem Header using namespace zu verwenden ist Schwachsinn, da man nicht weiss, wo der Header potentiall überall irgendwann landet. In Source Files verwende ich selbstverständlich using namespace so weit wie möglich.

    Dies ist eines der Probleme, mit welchen C++ im Gegensatz zu C# zum Beispiel zu kämpfen hat.

    $edit: Vielleicht wird ja mit C++31 die Unterscheidung in Header und Source optional. Das wäre eigentlich anzustreben.


  • Mod

    /rant/ schrieb:

    Dies ist eines der Probleme, mit welchen C++ im Gegensatz zu C# zum Beispiel zu kämpfen hat.

    Mit Modules ist das Problem behoben. Dafür müssen wir auch nur noch ein paar Jahre warten, nicht bis C++31. (Das Erscheinungsdatum bezweifle ich übrigens. Wenn sich der Dreijahestakt hält, dann wäre C++32 oder vielleicht 33 denkbar; für 31 müsste schon e.g. zweimal eine einjährige Verzögerung eintreten, was ich für unwahrscheinlich halte.)



  • /rant/ schrieb:

    Vielleicht wird ja mit C++31 die Unterscheidung in Header und Source optional. Das wäre eigentlich anzustreben.

    ist doch optional - nur unhandlich. Der Präprozessor macht's vor.


Log in to reply