C++ und const

Hallo Leute!

Ich bräuchte Innformationen.

Und zwar:

Wann (oder für was) den Rückgabetyp einer Funktion als const ?

const Object * Funktion(irgendwas)

und für was oder wieso soetwas:

Object * Funktion(irgendwas) const

TNX

Gruß

  • Michael -

Hallo !

Ich bräuchte Innformationen.

Und zwar:

Wann (oder für was) den Rückgabetyp einer
Funktion als const ?

const Object * Funktion(irgendwas)

Nicht der Rueckgabewert( hier Zeiger ) ist const sondern das Object auf welches der Zeiger zeigt. Du bekommst also eine Zeigervariable auf ein konstantes Objekt. Damit weisst Du den Compiler an keine Aenderungen an diesem Objekt zuzulassen.

Also:

Object \* x=Funktion(irgendwas);
x-\>ChangeObject();

Wenn ChangeObject keine const Memberfunktion ist, wird der Aufruf in der 2. Zeile einen Compilerfehler hervorufen, da das Object auf welches der Zeiger zeigt const ist also nicht veraendert werden darf.

und für was oder wieso soetwas:

Object * Funktion(irgendwas) const

Ich vermute mal das Funktion eine Memberfunktion einer Klasse ist. Mit dem const am Ende sagst Du dem Compiler, das diese Funktion keine Membervariablen des zugerhoerigen Objekts veraendert. Und hier schliesst sich der Kreis zu Deiner ersten Frage. Wenn Du ein const Object hast, muesste der Compiler ja eigentlich alle Memberfunktionsaufrufe fuer dieses Objekt verbieten, da diese ja das Objekt veraendern koennten (eben nicht mehr const). Wenn eine Memberfunktion allerdings mit einem const am Ende gekennzeichnet ist, weiss der Compiler, das solche Aufrufe nicht zu einer Aenderung des Objekts fuehren, und deshalb auch fuer const Objekte erlaubt sind.

Tschuess!

Andreas

const Object * Funktion(irgendwas)

bedeutet, dass der Rückgabewert der Funktion nicht geändert werden darf! Das ist z.B. sinnvoll bei der Überladung von Zuweisungsoperatoren:

const Egal & operator = (Egal &auchegal) {
 ...
 return \*this; }

Damit verhinderst du Fehler wie z.B: (x=a)=b! Wichtig ist, dass das return-Objekt nicht konstant sein muss, weil eine Umwandlung von nicht-const nach const stets erlaubt ist, nur umgekehrt gibt’s Probleme.

Object * Funktion(irgendwas) const

Das const am Ende einer Funktionsdeklaration tritt bei Member-Funktionen auf. Es bedeutet, dass das Objekt *this nicht geändert wird bzw. geändert werden kann!

cu Stefan.