const zu Beginn einer Zuweisungsoperator Überladung?



  • Hi,

    weiss jemand, worin der Unterschied zwischen den beiden folgenden Überladungen des Zuweisungsoperators liegt?

    1.       Foo& Foo::operator = (const Foo& f) {..};
    
    2. const Foo& Foo::operator = (const Foo& f) {..};
    

    Version 1 ist ja allgemein üblich. In einem alten Quellcode von mir, finde ich jedoch überall die zweite Version. Womöglich habe ich sie aus einem schlauen Buch übernommen (vielleicht Scott Meyers erstem Buch?). Nun weiss ich jedoch nicht mehr, welchen Sinn das erste "const" zu Beginn haben soll?



  • 1. (die korrekte Variante) gibt eine Referenz auf Foo zurück, 2. eine Referenz auf const Foo . Zuweisungsoperatoren geben i.d.R. einfach *this zurück. Und da der Zuweisungsoperator eh nur mit einem non- const Objekt aufgerufen werden kann, macht man konsequenterweise auch den Rückgabewert non- const .

    LG



  • Habe die Antwort gerade selbst gefunden:
    http://stackoverflow.com/questions/24416914/c-const-overloaded-assignment-operator-mechanism

    Folgendes funktioniert nur mit Version1 ohne const zu Beginn:

    Foo foo1, foo2, foo3;

    (foo1 = foo2) = foo3;



  • Hallo Fytch,

    verstehe, danke für Deine einleuchtende Antwort.


Log in to reply