for-schleife



  • Hallo,
    Mich würde mal interessieren, wiso die Folgende For schleife funktioniert:

    for(std::cout <<"\n1"; (bool)std::cout <<"\n2"[0]||true;std::cout <<"\n3")
            ;
    

    Einerseits verstehe ich nicht wiso:

    (bool)std::cout <<"\n2"[0]
    

    geht. Auf der anderen Seite, und damit wahrscheinlich zusammenhängend, ist der output
    1
    3
    3
    .
    usw.
    Wo bleibt die zwei??
    Ich schetze dass er std::cout <<"\n2"[0] in einen c-string umwandelt.
    Hätte aber erwartet, dass ich die 2 trotzdem auf der konsole sehe.
    Gruß


  • Mod

    (bool)std::cout <<"\n2"[0]||true
    

    ist mit vollständiger Klammerung

    (static_cast<bool>(std::cout) << ("\n2"[0]))||true
    
    static_cast<bool>(std::cout)
    

    ruft cout.operator void*() auf, nach Konvertierung zu bool entspricht das

    !std::cout.fail()
    

    und sollte regelmäßig true ergeben.

    "\n2"[0] liefert das Zeichen '\n', dessen numerischer Wert - wenn wir ASCII-Codierung unterstellen - 13 ist, mithin steht da

    (1 << 13)||true
    

    ein Ausdruck, der immer wahr liefert und sonst keine weiteren Nebeneffekte hat, allemal wird nichts ausgegeben.



  • Hi Camper,

    Danke für die Antwort. Brutal gut 🙂

    Gruß


Anmelden zum Antworten