for-schleife



  • hallo
    kann mir jemand erklären der unterschied zw. den Beiden For-shleifen:
    for(int Num = 0; Num <10; ++Num)
    for(int Num = 0; Num <10; Num++)

    was ist optimal für eine for schleife eine vorherige oder eine nachfolgede Inkrementierung?



  • Ist in diesem Fall total egal.
    Die 3. Angabe wird sowieso erst nach Abarbeitung der Schleife ausgeführt.





  • Nimm an Numm wäre kein int sondern ein Objekt. Für Objekte ist üblicherweise
    der Prefix-Operator schneller asl der Postfix-Operator. In deisem Fall wäre
    daher Variante 1 die Günstigere.



  • Chew-Z schrieb:

    Für Objekte ist üblicherweise
    der Prefix-Operator schneller asl der Postfix-Operator.

    gibts da 'ne erklärung für?



  • Zwei posts vor dir stehts doch

    Vokard schrieb:

    Denn beim Schreiben von selbstgebauten Operatoren kann man ja auch ++i und i++ implementieren. Dabei ist ein ++i schnell gemacht. Irgendwie das Inkrementieren hinkriegen und return *this; als referenz. Aber i++ ist schwer. man muss den alten Wert erst speichern, dann muss man noch by value returnen. Uih, Kosten über Kosten. Man mag bei selbergebauten Typen ++i einfach so viel lieber, daß Leute wie ich bereits dazu übergehen, nur ++i anzubieten und i++ wegzulassen.



  • Helium schrieb:

    Zwei posts vor dir stehts doch

    Vokard schrieb:

    Denn beim Schreiben von selbstgebauten Operatoren kann man ja auch ++i und i++ implementieren. Dabei ist ein ++i schnell gemacht. Irgendwie das Inkrementieren hinkriegen und return *this; als referenz. Aber i++ ist schwer. man muss den alten Wert erst speichern, dann muss man noch by value returnen. Uih, Kosten über Kosten. Man mag bei selbergebauten Typen ++i einfach so viel lieber, daß Leute wie ich bereits dazu übergehen, nur ++i anzubieten und i++ wegzulassen.

    na gut, kann ich auf die schnelle aber nicht nachvollziehen (warum man für i++ eine kopie machen muss z.b.) dafür fehlen mir dann doch die c++ kenntnisse



  • net schrieb:

    na gut, kann ich auf die schnelle aber nicht nachvollziehen (warum man für i++ eine kopie machen muss z.b.) dafür fehlen mir dann doch die c++ kenntnisse

    int i=1;
    int foo=++i; //welchen wert hat foo, welchen i?
    
    int i=1;
    int foo=i++; //welchen wert hat foo, welchen i?
    


  • Shade Of Mine schrieb:

    int i=1;
    int foo=++i; //welchen wert hat foo, welchen i?
    
    int i=1;
    int foo=i++; //welchen wert hat foo, welchen i?
    

    im ersten fall: foo == 2, i == 2
    im zweiten: foo == 1, i == 2
    aber was hat das mit meiner frage zu tun?
    höchstens soviel, das i++ leichter zu realisieren ist als ++i, weil man ja erst hinterher hochzählen muss



  • net schrieb:

    aber was hat das mit meiner frage zu tun?
    höchstens soviel, das i++ leichter zu realisieren ist als ++i, weil man ja erst hinterher hochzählen muss

    Nein, genau anders herum 😉
    Bei i++ musst du den aktuellen Wert zwischenspeichern, dann erhöhen und danach den zwischengespeicherten Wert zurückgeben. Was darüber hinaus natürlich auch bedeutet dass du nicht einfach eine konstante Referenz zurückgeben kannst sondern ein neues Objekt erzeugt werden muss.



  • finix schrieb:

    Nein, genau anders herum 😉
    Bei i++ musst du den aktuellen Wert zwischenspeichern, dann erhöhen und danach den zwischengespeicherten Wert zurückgeben. Was darüber hinaus natürlich auch bedeutet dass du nicht einfach eine konstante Referenz zurückgeben kannst sondern ein neues Objekt erzeugt werden muss.

    ah, danke 🙂
    das leuchtet ein. hätt ich auch selber drauf kommen können, hatte einfach 'n brett vorm kopf


Anmelden zum Antworten