3x Anfängerfragen



  • Hi!

    using namespace std;
    

    Bindet den gesammten namespace std ein. D.H. dir stehen dann alle in sdt definierten Klassen und Funktionen zu verfügung.

    using std::string;
    

    Bindet nur std::string ein. Eine weiter möglichkeit wäre:

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

    Ich glaube EXIT_SUCCESS ist nur ein define auf 0.

    mfg bauerb



  • Ok Vielen vielen Dank.
    👍



  • Und jetzt noch zur Erklärung, was eigentlich Namespaces sind:

    Stell dir vor du hast zwei Schubladen, eine namens "namespace std" und die andere "dein code" und noch einen Tisch den "global namespace".

    In der std-Schublade sind die ganzen Standardsachen drin. Wenn du jetzt irgendwo im Code std::string schreibst, bedeutet dies du greifst in die std-Schublade rein, holst dir deinen String und tust ihn in deine Schublade.

    Wenn du aber using namespace std schreibst, dann nimmt du die ganze Schublade und kippst sie übern Tisch aus, nun ist der globale Namensbereich voll mit std-Zeugs.

    Nun musst du nicht mehr den Umweg über die std-Schublade machen, denn deine code-Schublade liegt genau unterm Tisch, du brauchst die Sachen nur reinzuschieben.

    Stell dir vor es würden keine Namespaces geben, dann würde dein Tisch ganz schön voll sein und einiges könnte auch gar nicht existieren denn ein Gegenstand darf nur einmal existieren, um das Problem zu lösen müsstest du einige Sachen dann abändern ( Namen ändern ).

    Jetzt hat aber jede Bibliothek ihren eigenen Namespace das heißt ihre eigene Schublade und nichts kommt sich in die Quere.

    Fazit:
    std:: -> Du greifst nur das gewünschte Element raus.
    using -> Du packst alles aus der Schublade raus und riskierst damit Konflikte.

    Wann du was benutzen solltest, lernst du noch in deinem Programmierleben 😉



  • David_pb schrieb:

    Wenn du using namespace xyz verwendest machst du den kompletten Inhalt des Namespace global bekannt. Mit anderen Worten, der Namespace macht keinen Sinn mehr.
    Using namespace untergräbt also im Grunde den Sinn von Namespaces

    Sorry, aber das ist eine grobe, und so pauschal falsche, Generalisierung. 'using namespace' untergräbt den Sinn von Namensbereichen überhaupt nicht. Es würde den Sinn nur dann untergraben, wenn man überall stets *alle* verfügbaren Namensbereiche per 'using namespace' einbindet. Solange man dies nicht tut (was in der Tat blödsinnig wäre), untergräbt es überhaupt nichts und stellt ein praktisches Werkzeug dar.

    /EDIT: KasF hat das ganz bildlich beschrieben. 🙂



  • Konrad Rudolph schrieb:

    Es würde den Sinn nur dann untergraben, wenn man überall stets *alle* verfügbaren Namensbereiche per 'using namespace' einbindet. Solange man dies nicht tut (was in der Tat blödsinnig wäre), untergräbt es überhaupt nichts und stellt ein praktisches Werkzeug dar.

    Hm, auf diesen Fall wollt ich eigentlich anspielen. Ich kenn z.B. nicht wenig Code in dem using namespace in Headern verwendet wird. Schade, dass das falsch rüber gekommen ist.

    Ich wollte nicht vermitteln das using namespace konkret, in jedem Fall, immer schlecht und falsch ist:

    Drum: Wenn using, dann selektiv. Ansonsten ist es besser den Namespace immer vor die jeweilige Funktionalität (...) zu schreiben.





  • Wer schreibfaul ist und auf die using Direktive nicht verzichten möchte, kann als Alternative zur using Deklaration auch lokale using Direktiven nutzen.

    void foo()
    {
        using namespace std;
    }
    

    So werden alle Bezeichner des std Namensraum lediglich im Gültigkeitsbereich der Funktion foo bekannt gemacht. Die sauberste Lösung wäre in den meisten Fällen aber auch hier using Deklarationen zu verwenden.



  • und was spricht gegen using std::string; ?



  • und warum hat sich das "using namespace std" bei vielen so eingebürgert?
    sind jetzt alle einfach schreibfaul?^^


  • Mod

    tridane schrieb:

    sind jetzt alle einfach schreibfaul?^^

    In Beispielcode sicherlich. Der gleiche Grund, der dazu führt, dass in Codebeispielen struct sehr viel häufiger verwendet wird als man das sonst erwarten würde.


Anmelden zum Antworten