Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Statische Methoden - wieso nicht const?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
07.08.2006, 14:28 Uhr
Yadgar



High!

Martin Aupperle, Die Kunst der Programmierung in C++, Kapitel 21: Statische Klassenmitglieder...

Ich arbeite gerade das Beispiel mit der getUsedMem-Funktion durch, die als statische Funktion einer Klasse für Felder den von allen vorhandenen Objekten der Klasse verwendeten Speicher ermittelt. Unter anderem gibt es auch eine Übung, in der gefragt wird, wieso getUsedMem nicht als const deklariert ist, wo es doch keine Elemente der Klasse verändert...

Ich habe das Beispielprogramm dann mit const bei Deklaration und Definition von getUsedMem ausprobiert und bekam prompt eine ganze Latte von wie meistens reichlich kryptischer Fehlermeldungen. Dass statische Funktionen offenbar nicht const sein dürfen sehe ich nun, aber warum?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
07.08.2006, 15:40 Uhr
(un)wissender
Niveauwart


Das lustige ist: statische Methoden haben keine (nichtstatischen) Elemente. Versuch mal darauf zuzugreifen, der Compiler wird meckern, eben weil sie gar nicht da sind. Also macht auch const keinen Sinn, allerhöchstens für die statischen Member. Aber so ist nunmal die Konvention.

Wenn du dir darüber im klaren bist, was statisch und nicht statisch eigentlich bedeutet (Speicherbereiche), dann wird dir auch klar, warum const/volatile keinen Sinn machen.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
07.08.2006, 16:19 Uhr
ao

(Operator)


Die Bedeutung von const an einer Methode ist: "Die Methode lässt das Objekt (d.h. die Klasseninstanz), an das sie gebunden ist, unverändert."

Eine static-Methode hat keine gebundene Instanz, darum hat ein const-Attribut hier keinen Zweck.

Leider kann man statische Methoden trotzdem in Instanzmember-Syntax aufrufen:

C++:
class C
{
public:
   static void m () { }
};

int main (void)
{
    C c;
    c.m ();

    return 0;
}


Diese Syntax ist verwirrend, weil sie eine Bindung von m an die Instanz c nahelegt, die in Wirklichkeit nicht existiert. Semantisch richtig wäre das hier:

C++:
int main (void)
{
    C::m ();

    return 0;
}


was ebenfalls funktioniert, aber durch die Syntax klarstellt, dass es sich hier um eine Klassen-Methode und nicht um eine Instanzmethode handelt.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: