operator ++ - *this rückgabe



  • Ah okay, is klar, des hab ich wirklich ma verstanden.



  • MH ne doch nicht ganz, warum verwndet man nur beim postfix operator ein "const"?
    MfG
    Stromberg



  • Siehe mein Codebeispiel auf Seite 2. int verhält sich auch so, also muss du dafür sorgen, dass dein math das selbe Spiel spielt.



  • Noch eine neue Frage. Wieder das Beispiel von dem Link:

    class foo 
    { 
    public: 
        foo(int nr):m_nr(nr) {} 
    
        foo & operator++ ()    // Präfix 
        { 
            ++m_nr; 
            return *this; 
        } 
    
        const foo operator++ (int)  // die Postfix-Version bekommt ein int-dummy Parameter 
        {                           // um sie von der Präfix-Version unterscheiden zu können 
            foo tmp(*this); 
            ++(*this);       // benuzt den Präfix-Operator 
            return tmp; 
        } 
    private: 
        int m_nr; 
    };
    

    Der Postfix Operator nutzt doch den Präfix Operator nä? Wäre es nicht schneller wenn man ihm Postfix Operator einfach auch "++m_nr" reinschreibt, anstatt "++(*this)", sodass nicht extra der Präfix Operator aufgerufen werden muss? Oder ist das total egal?

    MfG
    Stromberg



  • Stromberg schrieb:

    Der Postfix Operator nutzt doch den Präfix Operator nä? Wäre es nicht schneller wenn man ihm Postfix Operator einfach auch "++m_nr" reinschreibt, anstatt "++(*this)", sodass nicht extra der Präfix Operator aufgerufen werden muss? Oder ist das total egal?

    Theoretisch ja, praktisch nein.

    Compiler sind nicht dumm - wenn sie sehen dass ++*this nichts anderes als ein ++n macht, dann optimieren sie das dahingehend.



  • Ah okay, dann kann ich ja dadurch wenigstens den compilier Vorgang schneller machen ^^ 😃



  • Stromberg schrieb:

    Der Postfix Operator nutzt doch den Präfix Operator nä? Wäre es nicht schneller wenn man ihm Postfix Operator einfach auch "++m_nr" reinschreibt, anstatt "++(*this)", sodass nicht extra der Präfix Operator aufgerufen werden muss? Oder ist das total egal?

    Theoretisch könnte es schneller sein, aber bei der Größe wird der Aufruf sowieso inline aufgelöst und dann sind beide Versionen identisch. ABER: Wenn du kompliziertere Klassen hast, wird auch der Code zum Inkrementieren aufwendiger - und dann ist es günstiger, nur eine Stelle anzupassen, als wenn du immer darauf achten müsstest, daß Präfix- und Postfix-Inkrement das selbe machen.


Anmelden zum Antworten