const ??
-
was bewirgt:
string GetIP() const;gegenüber
string GetIP();??
thx mfg und frohes weihnachtsfest.... :xmas1:
-
Das ist kein C, sondern C++. Es bewirkt das die Methode keine Member-Variablen verändern darf.
:xmas1:
-
falsches Forum. Das ist ein Konstrukt aus C++
class A { public: int bar(); int foo() const; };foo ist eine Methode, die das Objekt nicht verändert, während bar das Objekt verändert.
A const a; a.bar(); //<-- nicht erlaubt, da a const ist und bar das Objekt verändert a.foo(); //<-- ok
-
Dieser Thread wurde von Moderator/in TactX aus dem Forum ANSI C in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Im Grund sollte jede Methode, die das Objekt nicht verändert, Konstant sein. Weil:
class Foo { public: // ... void foobar() const { std::cout << "Foo::foobar() const" << std::endl; } void foononconstbar() { std::cout << "Foo::foononconstbar()" << std::endl; } }; // ... void irgendeinefunktion( const Foo& obj ) { obj.foobar(); // ist möglich, da die Methode konstant ist obj.foononconstbar(); // ist nicht möglich } int main() { Foo bar; irgendeinefunktion( bar ); }Der Aufruf von foononconstbar() wäre eigentlich nicht falsch, da die Methode das Objekt nicht verändert. Trotzdem mäckert der Compiler rum. Eben weil eine konstante Referenz an irgendeinefunktion() übergeben wird. Eine Referenz deshalb, weil dann keine unnötige Kopie des Objekts erzeugt wird, eine konstante Referenz deshalb weil das Objekt nicht geändert werden darf.
Wenn man sich nun durchweg an die "const correctness" hält, so hat man in der hinsicht nie Probleme, aber besseren Code!

grüße
-
cool danke,..

-
Auch wenn man mit const denkt man sei aus dem Schneider ist es nicht ganz so...
Beachte das const-Elementfunktionen trotzdem dafür sorgen können, das du interne Elemente veränderst:int& func() const { return member_int; } //... obj.func() = 5; // Autsch !!!Die Elementfunktion erfüllt zwar die Bitweise-Konstanz, doch nicht die Logische-Konstanz ...
Dein Compiler warnt dich bei sowas vermutlich nicht, also immer alles "Logische-Konstanz" programmieren.
(Nebenbei, sollte man eh nicht, nicht konstante Refernzen auf Member zurückgeben
)
-
Ja, aber in dem Fall ändert die Methode nichts an dem Objekt. Is trotzdem ein Risikofaktor, an den man aber eben denken muss!

-
David_pb schrieb:
Ja, aber in dem Fall ändert die Methode nichts an dem Objekt.
Deswegen habe ich mir auch die Mühe gegeben das hier:
Me schrieb:
Beachte das const-Elementfunktionen trotzdem dafür sorgen können, das du interne Elemente veränderst:
gut zu formulieren
