Inkrementoperator "++" vor oder hinter die variable schreiben ???



  • Hallo der Titel sagt ja schon alles und zwar möchte ich wissen ob es ein Unterschied gibt ob man den Inkrementoperator vor oder hinter die Variable schreibt - oder gibt es kein Unterschied und es nur Geschmackssache ??

    for(int i = 0; i < 3; ++i) {} // vor der Variable
    
    for(int i = 0; i < 3; i++) {} // hinter der Variable
    

    MFG
    SUPY



  • ++i inkrementiert und liefert den neuen Wert zurück, i++ inkrementiert und liefert den alten Wert zurück - das ist der technische Unterschied. Wenn dich der Rückgabewert des Operators nicht interessiert, solltest du die Präfix-Version verwenden (gerade bei überladenen Operatoren ist die üblicherweise schneller, weil sie den alten Wert nicht zwischenkopieren muß).



  • An für sich ist es ziemlich egal. Ich habe allerdings in einem fortgeschrittenen C++ Kurs gehört, das ++i schneller ist als i++. Das hatte etwas damit zu tun, das halt das nachträgliche inkrementieren länger im Speicher liegt. Der Unterschied ist aber so verschwindend gering das es sich auf die Programmlaufzeit nicht auswirkt.



  • CStoll schrieb:

    ++i inkrementiert und liefert den neuen Wert zurück, i++ inkrementiert und liefert den alten Wert zurück

    na, etwas größer ist der Unterschied schon 😉

    Sollte wohl heißen: i++ liefert den alten Wert zurück und inkrementiert.

    @chewbo: probier mal aus, ob dir das Folgende wirklich ziemlich egal ist:

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

    im Vergleich zu

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


  • Login wiedergefunden 😉 😃

    Gruß,
    MTE.



  • login_vergessen schrieb:

    CStoll schrieb:

    ++i inkrementiert und liefert den neuen Wert zurück, i++ inkrementiert und liefert den alten Wert zurück

    na, etwas größer ist der Unterschied schon 😉

    Sollte wohl heißen: i++ liefert den alten Wert zurück und inkrementiert.

    Sag ich doch (nur in anderer Reihenfolge - nach dem zurückgeben kann der Operator nichts mehr machen).



  • CStoll schrieb:

    login_vergessen schrieb:

    CStoll schrieb:

    ++i inkrementiert und liefert den neuen Wert zurück, i++ inkrementiert und liefert den alten Wert zurück

    na, etwas größer ist der Unterschied schon 😉

    Sollte wohl heißen: i++ liefert den alten Wert zurück und inkrementiert.

    Sag ich doch (nur in anderer Reihenfolge - nach dem zurückgeben kann der Operator nichts mehr machen).

    Entschuldige, aber entweder habe ich etwas auf den Augen 🕶 , bin total begriffsstutzig 😕 oder du beschreibst für beide Varianten (prä und post) das gleiche Verhalten (der Übersicht halber mit Zeilenumbruch):

    CStoll schrieb:

    ++i inkrementiert und liefert den neuen Wert zurück,
    i++ inkrementiert und liefert den alten Wert zurück

    😡 Ja, schon gut, ich habe was auf den Augen. Neu und alt sind irgendwie an mir vorbeigegangen... 🙄

    Sorry,
    MTE.



  • Um ehrlich zu sein hab ich es immer noch nicht "genau" verstanden:
    ++i inkrementiert und liefert den neuen Wert zurück,
    i++ inkrementiert und liefert den alten Wert zurück

    ...ok aber in welcher Situation benutze ich den Operator vor der variable und wann hinter, wenn beides praktisch auf das selbe hinausläuft ??

    mfg SUPY



  • Prä-Inkrementierung:

    int i = 0;
    cout<<++i;
    

    liefert: 1, da erst inkrementiert wird, dann die ausgabe gemacht wird.

    Post-Inkrementierung:

    int i = 0;
    cout<<i++;
    

    liefert: 0, da erst ausgabe gemacht wird, und dann erst inkrementiert.

    Hoff mal das war anschaulich?!



  • SUPY schrieb:

    ...ok aber in welcher Situation benutze ich den Operator vor der variable und wann hinter, wenn beides praktisch auf das selbe hinausläuft ??

    Den Postfix-Operator verwendest du, wenn dich der alte Variableninhalt noch interessiert (z.B. mylist.erase(pos++) - erase macht den übergebenen Iterator ungültig, darum inkrementiere ich ihn vorher und übergebe die alte Position zum Löschen). In den meisten Fällen interessiert dich nur der Nebeneffekt des Operators (erhöhe den Wert der Variablen) - da solltest du die Präfix-Version verwenden (ist potentiell schneller).


Anmelden zum Antworten