Ist ++i anders als i++???



  • Mal ne Frage. Benutze immer i++ wenn ich inkrementieren will. Es gibt aber auch Leute die ++i sagen. Hat das einen bestimmten Grund oder ist das nur vom STyles des Programmierers abhängig???





  • hmm, soweit ich weiss unterscheiden sich beide grundsätzlich nicht, jedoch kriegst unter Umständen du mit ++i fallenbedingte Probleme, mehr kann ich auch nicht sagen, nur das man bei ner einfachen Inkrementierung i++ nehmen sollte !



  • Original erstellt von <Hmmpf>:
    Mal ne Frage. Benutze immer i++ wenn ich inkrementieren will. Es gibt aber auch Leute die ++i sagen. Hat das einen bestimmten Grund oder ist das nur vom STyles des Programmierers abhängig???

    haste überladenne operatore ++, dann ist der ++i tendenziell schneller. und haste keine, isses egal. also gewöhnen wir uns an, immer ++i zu schreiben und brauchen dann nie mehr nachzudenken, ob gerade ein selbtgebauter typ oder ein eingebauter unter dem ++ liegt.



  • Original erstellt von Falky:
    mehr kann ich auch nicht sagen, nur das man bei ner einfachen Inkrementierung i++ nehmen sollte !

    einen gibts immer der widersprechen tut.



  • second



  • Original erstellt von PeterTheMaster:
    second

    wieso das den?



  • An Dimah: i++ ist schneller als ++i



  • Original erstellt von <lethimno>:
    An Dimah: i++ ist schneller als ++i

    😮 😮 😮 😮



  • Original erstellt von <lethimno>:
    An Dimah: i++ ist schneller als ++i

    begründe diesen schwachsinn bitte.



  • von wievielen takten reden wir hier ?



  • Original erstellt von JoelH:
    von wievielen takten reden wir hier ?

    ein zehntel takt reicht.



  • Original erstellt von volkard:
    ein zehntel takt reicht.

    Autsch, dann werd ich mal alle meinen zeitkritischen Programme umstellen 😉
    Wie ist das eigentlich bei forschleifen , das wird doch bestimmt wegoptimiert ?!



  • Hallo,
    mal unabhängig von dem Geschwindigkeitsunterschied finde ich es allein von der Semantik her besser ++i zu verwenden, dort wo man ++i braucht.

    ++i und i++ ist eben nicht das Selbe. Und je eher man sich das in sein Hirn einbrennt, desto eher versteht man, warum man ein:

    for (AssocContainer<T>::iterator i = c.begin() ; i != c.end() ; ++i)
    {
        c.erase(i);
    }
    

    durch ein:

    for (AssocContainer<T>::iterator i = c.begin() ; i != c.end() ;)
    {
        c.erase(i++);
    }
    

    ersetzen muss.



  • Original erstellt von JoelH:
    Autsch, dann werd ich mal alle meinen zeitkritischen Programme umstellen 😉
    Wie ist das eigentlich bei forschleifen , das wird doch bestimmt wegoptimiert ?!

    kommt darauf an - bei builtins JA, bei eigenen Typen wohl eher nicht (obwohl es theoretisch moeglich waere, wenn man die beiden operatoren schoen miteinander implementiert)

    warum sollte ich also performance verlust in kauf nehmen (egal wie gering er ist) wenn ichs nicht muss?



  • warum sollte ich also performance verlust in kauf nehmen (egal wie gering er ist) wenn ichs nicht muss?

    Oder: Warum sollte ich einen Informationsverlust in kauf nehmen (egal wie gering er ist), wenn ich's nicht muss?



  • HumeSikkins machst du dadurch nicht die Semantik des fors etwas kaput? das for was in jedem c++ Hirn so eingebrant ist und dadurch auch schneller verstanden werden kann.
    Oder willst du uns was mit "AssocContainer" mit teilen, was ich nicht verstanden habe.



  • Oder willst du uns was mit "AssocContainer" mit teilen, was ich nicht verstanden habe.

    AssocContainer steht für einen der assoziativen Container aus der Standardbibliothek. Nimm z.B. std::map.

    Das erste Beispiel sieht schön aus, ist aber falsch, das zweite ist richtig.
    Die Zeilen sind nur ein Beispiel dafür, dass ++i und i++ nicht das Selbe sind. Und das man beide ihrer Semantik nach einsetzen sollte.



  • vielleicht liegt es zumindestens einfach an meinen verkrusteten Denkstrukturen, ich komme halt von c64 i = i +1 , darauf wird der zusammengesetzte Operator += und daraus resultiert eben i++ und nicht ++i . Das ist einfach eine kürzere Nervenverbindung in meinem Gehirn.

    [ Dieser Beitrag wurde am 28.11.2002 um 12:57 Uhr von JoelH editiert. ]



  • Original erstellt von JoelH:
    **vielleicht liegt es zumindestens einfach an meinen verkrusteten Denkstrukturen, ich komme halt von c64 i = i +1 , darauf wird der zusammengesetzte Operator += und daraus resultiert eben i++ und nicht ++i . Das ist einfach eine kürzere Nervenverbindung in meinem Gehirn.
    **

    aber leider falsch.
    y=(i=i+1);
    ist gleich
    y=(i+=1);
    ist gleich
    y=(++i);
    ist ungleich
    y=(i++);

    ok, jetzt haste kapiert, daß ++i das normale inkrementieren ist, und das ist ab jetzt einfach eine kürzere nervenverbindung in deinem gehirn.
    so gehts mir wenigstens. ich schreib schon alleine deswegen lieber ++i, weils das normale inkrementieren ist, das normale i=i+1.


Anmelden zum Antworten