std::cout << "Hab da eine Frage";



  • Hi,
    habe mit C++ (noch) nichts zu tun und programmiere nur in Java (dieses Schuljahr lerne ich dann noch ASM).
    Hier im Forum wurde öfters erwähnt, dass der neue C++ Standard cout<< mit std::cout<< ersetzt.

    1. Warum ist das so?
    2. Warum verändert man nicht einfach den internen Ablauf von cout<< anstatt einen neuen Befehl zu machen?

    Liebe Grüße
    Real



  • Nein du hast da etwas falsch verstanden. Das Objekt "cout" wurde in einen Namespace (Namensraum für Variablen, in verschiedenen Namensräumen können gleiche Bezeichner vorkommen) gepackt.

    Wenn du nicht jedesmal "std::cout" schreiben willst kannst du den Namensraum auch auflösen - ähnlich dem in Java verwendeten import:

    #include <iostream>
    using namespace std; // Namensraum std (in diesem liegt cout) auflösen
    
    int main ()
    {
        cout << "Jetzt gehts auch ohne std::" << endl;
        return 0;
    }
    

    MfG SideWinder



  • std ist der Namensbereich, wenn davor ein using namespace std; steht, brauchst du das std nicht angeben.



  • Man muss, aber nicht den ganzen Namespace dem globalen Namespace hinzufügen.
    Du kannst auch einfach using std::cout; schreiben, dann hast du nur das cout ohne dem std:: zur verfügung und der Rest bleibt wo er ist.



  • das wurde so gemacht, damit du leichter dein eigenes cout benutzen kannst(falls du mal eins benutzen wolltest)



  • otze schrieb:

    das wurde so gemacht, damit du leichter dein eigenes cout benutzen kannst(falls du mal eins benutzen wolltest)

    Bei cout? Ich glaub eher weil eben alles was aus der Standard-Library kommt in std steht hat man cout auch reingedrückt 😉

    Wer sein Objekt tatsächlich auch cout nennt verwirrt doch damit nur unnötig, selbst für Leute für Windalf wäre es ungeeignet da viel zu lang *scnr*

    MfG SideWinder



  • der satz galt eigentlich für die complette stl, imho finde ich eine implementation von cout aber auch nicht so schlecht, so könnte man in einer directx/opengl umgebung mit cout genauso arbeiten wie in der konsole...



  • Dann wäre der Name cout aber irgendwie unpassend.



  • a) wieso
    b) würdest du nicht einen leicht unpassenden namen in kauf nehmen, wenn du dann mit einer programminternen console genauso wie mit der standardkonsole arbeiten könnest?



  • Wozu so kompliziert? Man schreibt ne eigene Streamklasse (Gibt nen Thread von mir zu dem Thema, einfach mal nach meinem Nick+Josuttis suchen) und leitet cout dann mit einem einfachen cout.rdbuf(eigenerStream.rdbuf()); um



  • b) würdest du nicht einen leicht unpassenden namen in kauf nehmen, wenn du dann mit einer programminternen console genauso wie mit der standardkonsole arbeiten könnest?

    Dieser Antwort nach nehm ich also an, dass du file streams
    auch immer so behandelst:

    ofstream datei("text.txt");
    cout.rdbuf(datai.rdbuf());
    
    cout << "Das steht jetzt in der Datei ..";
    

    Kann ich also genau so behandeln, wie auf der Standardkonsole und sieht
    nebenbei auch noch viel spektakulärer aus, als würd ich nur datei
    verwenden.

    [edit] Wicht übrigens langsam dem Thema ab ..



  • naja, bei filestreams sind wir ja langsam bei den birnen angekommen 🙄



  • cout steht meines Wissens für console output und es wäre mir unerklärlich warum es nett wäre es für open graphics library output umbiegen zu können.

    MfG SideWinder



  • Ist mir ebenfalls ziemlich unverständlich, warum man so einen misverständlichen Namen wählen sollte.
    btw. würde mir "wcout" besser gefallen. 😉



  • Wenn dann ja wohl tcout - man muss beides unterstützen 😉

    MfG SideWinder



  • console output

    ich verweise nur auf die console in cs ;), wäre da cout so unangebracht?



  • Wenn du dir das HL-SDK schonmal angesehen hast, dann ja 😉

    MfG SideWinder



  • SideWinder schrieb:

    Wenn du dir das HL-SDK schonmal angesehen hast, dann ja 😉

    MfG SideWinder

    hab ich nicht, bin auch net so der ego-shooter zocker 🙂
    aber so ziemlich jedes spiel hat heutzutage mindestens eine rudimentäre console wieso dann nicht cout dafür als namen benutzen?



  • Was hast du denn davon? Gar nichts, außer Verwirrung. cout ist nicht mal besonders schön.
    Sowas hier wäre schon eher noch meinem Geschmack:

    console.write(const std::wstring&);
    

    EDIT: ODer natürlich auch als Stream. Geht mir jetzt eher um den Namen.

    console.out  <<  L"Blubb!";
    


  • @Optimizer: Du bist kein Ritter sondern Extermist 😃

    MfG SideWinder


Log in to reply