i++ != i+1 ?



  • Minispiri schrieb:

    Leute, jetzt müsst ihr mir auch mal helfen 😉

    Ich schreibe meine for-Schleife so:

    for (int i=0; i<100; i++) {}
    

    Was ist denn jetzt der Unterschied, wenn man statt "i++" einfach "++i" schreibt? Ist das das selbe oder gibt es auch dafür eine Erklärung?

    Danke schonmal im Voraus.

    Ist in dem Fall egal, weil ++i oder i++ *immer* nach Ausführung des Schleifenkörpers duchgeführt wird. Dazwischen kann sich nichts einmogeln. Wegen des Nachhers mag ich aber die Schreibweise ++i nicht, aber eigentlich ist's Banane.



  • Wutz schrieb:

    mngbd schrieb:

    Minispiri schrieb:

    Ich schreibe meine for-Schleife so:

    for (int i=0; i<100; i++) {}
    

    Ist in diesem Fall gleichwertig. Weil der Wert des Ausdrucks i++ hier nicht verwendet wird.

    Soso, der Ausdruck wird also nicht verwendet. Und was passiert beim nächsten Anlauf des Abbruchsbedingungstest? Hier wird der Ausdruck sehr wohl wiederverwendet und deshalb macht es Sinn, auch hier ++i zu verwenden um dem Compiler zu schnellerem Code zu animieren, wenn er es nicht schon selbst bemerkt.

    Ich meinte: semantisch gleichwertig. Auch hab ich nicht behauptet, dass der Ausdruck nicht "verwendet" wird, weil ich keine Ahnung habe, was das heissen soll. Es ist aber so, dass der Wert des Ausdruckes nach der Evaluierung verworfen wird, der Ausdruck (der auch eine Anweisung ist) also alleine wegen seines Seiteneffektes dort steht.

    Was den Rest angeht, ist fricky's Argument gültig:

    a = i++;
    // mache man zu
    a = i;
    i += 1;
    
    // und
    
    a = ++i;
    // mache man zu
    i += 1;
    a = i;
    

    Aus Sicht der Sprache ist keines von beiden schneller, und alles andere ist system- oder compilernahes Kauderwelsch.


Anmelden zum Antworten