Verständnis Frage const
-
Hallo, könnte mir einer den Unterschied zwischen
const im Parameter und cons nach Methodenname erklären.
Also bsp.
testFunc(const A &a)vs
testFunc(A &a) constvs
testFunc(const A &a) const.
Vielen Dank
-
testFunc(const A &a)Du kannst die Variable, auf die a verweist, nicht ändern.
testFunc(const A a)Du kannst die Variable a nicht ändern.
testFunc(...) constInnerhalb der Funktion kannst du keine Member deines Objekts ändern.
-
out schrieb:
testFunc(...) constInnerhalb der Funktion kannst du keine Member deines Objekts ändern.
Genauer gesagt, die hier genannte "Funktion" kann nur eine Memberfunktion (-> Methode) sein, wobei du auf this nur lesend zugreifen kannst.
-
Dann ist ja eine Definition wie
testFunc(const A &a) constunnötig oder?
-
DKlay13 schrieb:
Dann ist ja eine Definition wie
testFunc(const A &a) constunnötig oder?
Ne wieso? Erklät mal wieso das unnötig sein soll?
-
Per Definition kann ich auf das Objekt ja nur lesend zugreifen. Wenn ich das so definiere
testFunc(const A &a)also "könnte" man ja nur per const_cast evtl noch am Objekt was ändern...
-
DKlay schrieb:
Per Definition kann ich auf das Objekt ja nur lesend zugreifen. Wenn ich das so definiere
testFunc(const A &a)Richtig, du kannst nur auf das Objekt, auf das a verweist, lesend zugreifen.
testFunc() constDas const hinterm Funktionsnamen bezieht sich aber auf das Objekt this.
DKlay schrieb:
also "könnte" man ja nur per const_cast evtl noch am Objekt was ändern...
Nur wenn das Objekt auf oberste Ebene nicht const ist. Ansonsten formatiert es deinen PC.
-
Ansonsten formatiert es deinen PC.
, das probiere ich mal demnächst.Und Danke für die Antworten, muss mal damit rumspielen!
-
Wie gesagt, es gibt mehrere Objekte - je nach dem.
void foo(Bar const& b) { b.modifySomething(); // geht nicht b.readSomething(); // geht }In der Funktion gibt es nur das Objekt b, was man ändern könnte (oder auch nicht!).
void Foo::baz() const { this->counter = 5; // geht nicht cout << this->counter << endl; // geht }In dieser Methode gibt es auch nur ein Objekt und zwar this. Das kannst du nicht ändern, da die Methode const ist.
void Foo::baz(Bar const& b) const { this->counter = 5; // geht nicht b.setCounter(35); // geht nicht cout << this->counter << " - " << b.getCounter() << endl; // geht }Hier existieren 2 Objekte, this und b. Beide können nicht geändert werden, sondern sind readonly.
Beachte: Auf const Objekten können auch nur const-Methoden aufgerufen werden.