frage zu codeschnipsel
-
Hallo,
ich verstehe folgenden code nicht
int k = 0; k=(++k<3?k:0); cout <<k;die ausgabe ist immer 1, meiner meinung nach sollte es 0 sein.
beim ersten durchlauf
1<3 true k = 1
2<3 true k = 2
3<3 false k=0;was übersehe ich ?
-
Ich weiß nicht, was du übersiehst. Aber ich sehe z.B. keine Schleife, die mehr als einen Durchlauf überhaupt ermöglichen würde.
Das ganze wird SO, wie es da steht, sequentiell abgearbeitet:
k = 0 => k = 0
++k => k = 1
k < 3 => 1 < 3 => true
k = k => k = 1Ausgabe 1.
-
meeydoo schrieb:
die ausgabe ist immer 1, meiner meinung nach sollte es 0 sein.
Dein Irrtum.
meeydoo schrieb:
beim ersten durchlauf
Wo siehst Du denn bei deinem Codefetzen mehr als einen Durchlauf?
meeydoo schrieb:
was übersehe ich ?
int k = 0; k = ( ++k < 3 ? k : 0 ); // | // k == 1 nach Preinkrement und vor < 3 // 1 < 3 == true // => k = k | k = 1 cout << k; // 1// Edit: zu langsam...
-
ups das ist ja garkeine schleife

ja klar danke
-
meeydoo schrieb:
ups das ist ja garkeine schleife

Und jetzt gehe hin und schreibe 100 mal "Ich werde meinen Code in Zukunft sorgfältig einzurücken!".
-
Swordfish schrieb:
meeydoo schrieb:
ups das ist ja garkeine schleife

Und jetzt gehe hin und schreibe 100 mal "Ich werde meinen Code in Zukunft sorgfältig einzurücken!".
Hmm, das würde ich so lösen !
for ( int i = 0; i < 100 ; i ++ ) { std::cout << Ich werde meinen Code in Zukunft sorgfältig einzurücken"; std::cout << std::endl; std::cout << std::endl; ´ }richtig so ? ;P
-
Och nö, das war nur 99 mal
Ganze mühe umsonst.
-
blubii schrieb:
Och nö, das war nur 99 mal
Ganze mühe umsonst.Zähl's noch einmal, Sam.
-
ist wirklich garantiert, dass die Branches immer erst nach der Bedingung evaluiert werdne dürfen?
normalerweise ist ja sowas wie "k++ - k" UB. Im ersten Moment hätte ich das auch hier erwartet, weil es ein einziger Ausdruck ist.ich kann mir nicht vorstellen, dass das hier UB ist:
int myif(bool cond, int a, int b){ return cond?a:b } k=myif(++k < 3, k, 0);und der Ausdruck vom Threadstarter nicht. Kann mich da jemand widerlegen?

-
otze schrieb:
ist wirklich garantiert, dass die Branches immer erst nach der Bedingung evaluiert werdne dürfen?
normalerweise ist ja sowas wie "k++ - k" UB. Im ersten Moment hätte ich das auch hier erwartet, weil es ein einziger Ausdruck ist.Es gibt im C- und C++-Standard definierte Sequenzpunkte, bei denen sichergestellt ist, welche Werte definitiv vorher berechnet wurden. Der ?:-Operator gehört dazu, die Kommas zwischen den einzelnen Funktionsparametern nicht.