Ich habe Code wie diesen ...
%Vor% Warum muss ich const
endlich setzen, um eine Funktion als konstanten Typ zu definieren, aber wenn ich eine Funktion machen muss, kann ich das wie ...
Die obige Funktion fun()
ist ebenfalls in derselben Klasse. Ich möchte nur wissen, was der Grund dafür ist?
mit einer Konst-Instanzmethode wie int get_hours() const;
, die const
bedeutet, dass die Definition von int get_hours() const;
nicht this
ändert.
mit einer statischen Methode wie static void fun();
, const gilt nicht, weil this
nicht verfügbar ist.
Sie können auf eine statische Methode aus der Klasse oder Instanz zugreifen, weil sie sichtbar ist. Genauer gesagt können Sie keine Instanzmethoden oder Zugriffsinstanzvariablen (z. B. x
, hours
) von der statischen Methode aufrufen, da keine Instanz vorhanden ist.
Das const bedeutet am Ende, dass die Funktion konstant ist, so dass der Zustand des Objekts nicht geändert wird.
Wenn Sie am Ende const setzen, können Sie den Status der Objektmitglieder nicht ändern.
Das Deklarieren einer Funktion statisch bedeutet, dass sie nicht zum Objekt gehört, sondern zum Klassentyp.
Wenn const am Anfang steht, ist der Wert des Rückgabetyps eine Konstante.
Wenn Sie const am Anfang setzen, wenden Sie es auf den Rückgabetyp an. Dies ist nicht wichtig, wenn Sie den Rückgabetyp angeben, wenn sie ungültig sind. Nehmen wir an, Sie geben char*
zurück, das nicht const ist. Wenn Sie const am Anfang setzen, erhalten Sie am Ende
Das sagt mir, dass der Rückgabetyp ein const char*
ist, keine const-Funktion, die char*
zurückgibt.
Wenn Sie es am Ende platzieren, vermeiden Sie dieses Problem.
Es ist ein rein grammatikalisches Problem. const
ist ein cv-qualifier
und muss, wenn es auf eine Elementfunktion angewendet wird, nach den Parameterdeklarationen platziert werden. Wenn Sie versucht haben, ihn vor den Funktionsnamen zu setzen, könnte er nur als Rückgabetyp der Funktion interpretiert werden.
static
andererseits ist ein Speicherklassenspezifizierer und muss vor dem Deklarator erscheinen, auf den er angewendet wird.
Diese Regeln gehen nur von der Art und Weise aus, wie die C ++ - Grammatik definiert ist.
Der eine und der andere wird etwas detaillierter hier erklärt. Wenn Sie const
nach einer Funktionsdeklaration setzen, wird die Funktion konstant, dh sie kann nichts an dem Objekt ändern, das die Funktion enthält.
Tags und Links c++