Präfix und Suffix Inkrement



  • Finde das Ganze verwirrend, das es nicht das macht, was ich erwarte.

    Beispiel:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    int a = 1, b = 1, c = 1, d = 1, e = 1, f = 1, g = 1, h = 1;
    int w = 0, x = 0, y = 0, z = 0;
    
    w += a += b;
    x += c =+ d;
    // y =+ e += f;
    // z =+ g =+ h;
    
    cout << w << " " << a << " " << b << endl << x << " " << c << " " << d << endl;
    
    return 0;
    }
    

    So wie erwartet, gibt die Zeile w += a += b; 2 2 1 zurück, das heißt es wird von rechts nach links gerechnet, wobei erst a ein Wert zugewiesen wird.

    Die Zeile x += c =+ d; gibt allerdings 1 1 1 zurück, also wird zumindest dem ersten Wert (x) der der eigene + der zweite (x + c) zugewiesen, was auch der erste Schritt bei der Auflösung dieser Zeile sein sollte. Danach sollte nach meinem Verständnis dem zweiten Wert (c) der dritte (d) zugewiesen werden. Das passiert aber nicht.

    Die beiden auskommentierten Zeilen, bei denen bereits anfangs ein Präfix-Inkrement vorkommt, laufen gar nicht.

    Eigentlich ist das doch das gleiche, wie das Inkrement, welches nur um 1 erhöht (++value bzw. value++), bloß dass anstatt 1 der Wert / der Wert des Variableninhalts hinter dem Inkrement-Operator addiert wird.

    Ich weiß, ich stelle komische Fragen 😕, hoffe mir kann sie jemand beantworten 🙂


  • Mod

    =+ sind zwei Tokens, von denen das erste ( = ) den Zuweisungsoperator und das zweite ( + ) den unären Plus-Operator repräsentiert. x += c =+ d; ist vollkommen äquivalent zu x += (c = d); .



  • += ist nicht das gleiche wie =+, denn =+ wird getrennt behandelt und daher wird die zeile so interpretiert:

    x += c =+ d;
    // entspricht
    x += c = +d;
    // entspricht
    x += 1 = +1;
    


  • Arcoth schrieb:

    =+ sind zwei Tokens, von denen das erste ( = ) den Zuweisungsoperator und das zweite ( + ) den unären Plus-Operator repräsentiert. x += c =+ d; ist vollkommen äquivalent zu x += (c = d); .

    anonymxxx schrieb:

    += ist nicht das gleiche wie =+, denn =+ wird getrennt behandelt und daher wird die zeile so interpretiert:

    x += c =+ d;
    // entspricht
    x += c = +d;
    // entspricht
    x += 1 = +1;
    

    Danke ihr beiden, habs verstanden. 🙂


Log in to reply