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ß
-
(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ß