Ergebnis 1 bis 4 von 4

Thema: Was macht cout << cin?

  1. #1
    Unregistriert
    Gast

    Standard Was macht cout << cin?

    huhu ihrs

    wenn ich
    cout << cin;
    mache, wird eine Adresse ausgeben.
    Was ist das für eine Adresse bzw. zu wem gehört diese Adresse?

    Danke euch
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!
    Geändert von The User (26.04.2009 um 16:24 Uhr) Grund: Aussagekräftiger Titel

  2. #2
    Forum Guru Avatar von driver
    Registriert seit
    10.04.2006
    Alter
    34
    Beiträge
    20.729
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: cin

    vielleicht hilft dies dir weiter...
    http://www.cpp-tutor.de/cpp/le04/le04_02.htm
    >> die icq-schreiberlinge bitte dies hier beachten



    1679 entdeckte Gottfried Wilhelm Leibniz das Binärsystem, bei einem Gespräch mit seiner Mutter: "Ja..., Nein..., Nein..., Nein..., Ja..., Ja..., Nein..."

  3. #3
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: cin

    Hi!
    Man kann etwas probieren:
    Es gibt zwei Möglichkeiten in C++, den <<-Operator zu überladen, einmal als Elementfunktion und einmal als globale Funktion. Der zweite Weg ist üblicher, also kann man es einmal probieren:
    Code:
    #include <iostream>
    using namespace std;
    
    int main()
    {
      operator<<(cout, cin);
    }
    Das kompiliert nicht, die Funktion existiert nicht. Folglich muss es eine Elementfunktion sein:
    Code:
    #include <iostream>
    using namespace std;
    
    int main()
    {
      cout.operator<<(cin);
    }
    >> Geht und führt zur selben Ausgabe.
    Sieht doch aus wie eine Pointer-Adresse, das wollen wir einmal testen:
    Code:
    #include <iostream>
    using namespace std;
    
    int main()
    {
      cout << &cin << endl << cin;
    }
    Ausgabe:
    0x804a040
    0x804a048
    Es ist nicht die Adresse von cin, aber die Ähnlichkeit fällt doch auf.
    Mit cout sieht die Ausgabe recht ähnlich aus, vermutlich klappt es wohl auf jedem ios oder ios_base geht.
    Dazu finden wir hier jedoch keine Funktion operator<< mit ios oder ios_base als Operanden.
    Folglich muss eine Konvertierung stattgefunden haben, in ios finden wir operator void*.
    Code:
    #include <iostream>
    using namespace std;
    
    int main()
    {
      cout << (void*)cin << endl;
      cout << cin;
    }
    Die beiden Ausgaben sind identisch!
    Das Ergebnis hat laut Doku keine besondere Bedeutung, außer es ist 0, dann ist der interne Status einer, der einen Fehler anzeigt. Warum ein operator void* und kein operator bool verwendet wurde, ist mir schleierhaft.

    Viele liebe Grüße
    The User

    PS:
    @Driver
    In der Praxis ist das keine entscheidende Frage, ich glaube es war nur Interesse und kein wirkliches Problem.
    PPS:
    Die Rückgabe der Funktion ios:perator void* ist vom Compiler abhängig:
    Visual C++:
    Code:
    operator void *() const { if(state&(badbit|failbit) ) return 0; return (void *)this; }
    Hierbei wird die Konvertierung im C-Stil geschrieben, was zu Unklarheiten führt.
    Anders sieht es beim GNU Compiler in basic_ios (das ist ein Implementierungs-Detail) aus (abgesehen von der besseren Kommentierung, Einrückung und Lesbarkeit!):
    Code:
          operator void*() const
          { return this->fail() ? 0 : const_cast<basic_ios*>(this); }
    Explizit wird klar gemacht, dass ein const_cast stattfindet, denn der Typ von this in einer Funktion mit const nach den Klammern ist const basic_ios*. Anschließend findet implizit die Konvertierung in void* statt, die selbstverständlich sein sollte.
    Wenn mehrfache Vererbung ins Spiel kommt, ist die Adresse nicht mehr unbedingt diejenige, die man durch (void*)cin erhält. Dadurch weichen die Zahlen leicht ab.
    Es sollte klar sein, dass du den Rückgabewert dieser Funktion nicht verwenden solltest außer als boolean!
    Geändert von The User (06.04.2009 um 18:33 Uhr)

  4. #4
    Unregistriert
    Gast

    Standard AW: cin

    das hat mir weitergeholfen
    vielen dank euch

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •