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 aufconst 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-mechanismFolgendes funktioniert nur mit Version1 ohne const zu Beginn:
Foo foo1, foo2, foo3;
(foo1 = foo2) = foo3;
-
Hallo Fytch,
verstehe, danke für Deine einleuchtende Antwort.