?
DocShoe schrieb:
bmario_ schrieb:
Das wird nix. Kannst du garantieren, das die nicht-const Version von baz sich const verhält? Sonst darfst du sie ja nicht aus der const Version von baz aus aufrufen! Im Allgemeinen sollte das nicht der der sein, denn sonst bräuchtest du ja keine nicht-const Version :xmas1:
Ähm ja, war wohl zu kurz gefasst.
Das man in einem nicht-const Objekt jede beliebige const Funktion aufrufen kann, sollte klar sein. Genauso klar ist es, dass du ohne Probleme aus nicht-const Funktionen const Funktionen aufrufen kannst und beim Rückgabewert etwaige const-ness wegcasten kannst. Das kannst du machen, da dein Objekt ohne nicht const ist und ein Benutzer deiner Klasse damit auch nicht erwartet, dass sich das Objekt const verhält.
Anders herum ist es aber ein Problem. Hast du ein Objekt, dass const ist und du versuchst nun eine nicht const-Funktion zu benutzen (dank const cast auf this ohne Probleme möglich) hast du ein Problem, wenn diese nicht const Funktion etwas am Objekt verändert. Das ist ein Problem, da sich in diesem Fall aus Benutzersicht ein const Objekt, für das eine const Funktion aufgerufen wurde, ändert!
Da du das Objekt selbst "ent-const-est" kannst du auch keinerlei Garantien darüber abgeben, ob die aufgerufene Funktion sich const verhält. Aber andersherum ist das egal. Du hast ein nicht-const Objekt und darfst damit alles machen was du willst, unter anderem Funktionen nutzen, die const sind.
Hoffe das ist jetzt verständlicher, ansonsten mal bei Scott Meyers nachschlagen, der Mann kann definitiv besser erklären als ich.