Warum müssen wir const am Ende des Funktionskopfs setzen, aber zuerst statisch?

9

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 ...

tun %Vor%

Die obige Funktion fun() ist ebenfalls in derselben Klasse. Ich möchte nur wissen, was der Grund dafür ist?

    
teacher 30.08.2011, 19:47
quelle

6 Antworten

10

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.

%Vor%     
justin 30.08.2011, 19:53
quelle
9

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.

    
Yochai Timmer 30.08.2011 19:51
quelle
4

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

%Vor%

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.

    
Alex 30.08.2011 19:50
quelle
2

Es liegt daran, dass, wenn Sie die Konstante zuerst setzen, dies bedeuten würde, dass Sie ein const Ding von der Funktion zurückgeben - d. h. eine andere Bedeutung, dass die Funktion const

ist     
Ed Heal 30.08.2011 19:50
quelle
1

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.

    
Charles Bailey 30.08.2011 21:21
quelle
0

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.

    
CodeCaster 30.08.2011 19:57
quelle

Tags und Links