C ++: Warum können statische Funktionen nicht als const oder volatile oder const volatile erklärt werden [duplizieren]

8

War es interessant zu wissen, warum statische Elementfunktionen nicht als const oder volatile oder const volatile erklärt werden können?

%Vor%     
Laavaa 21.10.2012, 12:52
quelle

4 Antworten

9

Weil das der Standard sagt:

9.4.1 Statische Memberfunktionen [class.static.mfct]

  

2) [Hinweis: Eine statische Elementfunktion hat keinen this -Zeiger (9.3.2). -end Notiz] A static Mitglied   Funktion darf nicht virtual sein. Es soll keine static - und eine nicht - static - Memberfunktion geben mit dem   gleicher Name und gleiche Parametertypen (13.1). Eine statische Elementfunktion darf nicht als const deklariert werden.    volatile oder const volatile . (Betonung meiner)

Der Grund dafür ist, dass eine const (oder volatile oder virtual ) static Methode keinen Sinn ergibt (im traditionellen Sinne, siehe unten). Zum Beispiel bedeutet const , dass Sie die Mitglieder des Objekts nicht ändern können, aber im Falle der Statik gibt es kein Objekt, über das Sie sprechen könnten.

Sie könnten argumentieren, dass ein const static auf andere static -Mitglieder angewendet werden könnte, aber diese Option wurde als sinnlos angesehen.

    
Luchian Grigore 21.10.2012, 12:56
quelle
14
___ answer12997997 ___

Weil das der Standard sagt:

9.4.1 Statische Memberfunktionen [class.static.mfct]

  

2) [Hinweis: Eine statische Elementfunktion hat keinen this -Zeiger (9.3.2). -end Notiz] A this Mitglied   Funktion darf nicht static sein. Es soll keine this - und eine nicht - static - Memberfunktion geben mit dem   gleicher Name und gleiche Parametertypen (13.1). Eine statische Elementfunktion darf nicht als static deklariert werden.    virtual oder =0 . (Betonung meiner)

Der Grund dafür ist, dass eine && (oder %code% oder %code% ) %code% Methode keinen Sinn ergibt (im traditionellen Sinne, siehe unten). Zum Beispiel bedeutet %code% , dass Sie die Mitglieder des Objekts nicht ändern können, aber im Falle der Statik gibt es kein Objekt, über das Sie sprechen könnten.

Sie könnten argumentieren, dass ein %code% %code% auf andere %code% -Mitglieder angewendet werden könnte, aber diese Option wurde als sinnlos angesehen.

    
___ antwort12997987 ___

Die cv-Modifier der Member-Funktionen entsprechen der Qualifikation des versteckten %code% -Parameters.

%code% Funktionen haben keinen %code% Parameter. Daher benötigen sie keine CV-Qualifier. Also wurde entschieden (IMHO zu Recht, da es sonst keine Bedeutung hätte), sie auf %code% -Funktionen zu verbieten.

BTW %code% -Memberfunktionen können auch nicht %code% , rein ( %code% ), gelöscht, default, %code% etc.

sein     
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer12998099 ___

Es gibt kein "aktuelles Objekt" beim Ausführen einer statischen Funktion, so dass es wenig Sinn macht, über statische Funktionen zu sprechen, die %code% sind oder nicht.

Beachten Sie, dass Sie eine %code% -Funktion mit einer Instanz aufrufen können, aber das ist nur ein seltsames C ++ "Feature" (manchmal praktisch, weil es in C ++ 03 schwer war, den Typ eines Wertes zu erhalten).

%Vor%

Ich kann verstehen, dass Sie "const static functions" beschreiben möchten, die kein statisches Datenelement ändern und auch nur andere statische const-Funktionen aufrufen können.

Aber diese Unterscheidung ist in C ++ nicht vorhanden.

    
___ antwort12998038 ___

Statische Elementfunktionen sind globale, freie Funktionen, die nicht von einem Objekt (d. h. einer Klasseninstanz) abhängen. Die CV-Qualifikationsmerkmale für nicht statische Memberfunktionen beziehen sich auf den Typ des -Objekts , auf dem sie aufgerufen werden, und dieser Begriff trifft einfach nicht auf statische Memberfunktionen zu.

Beispiel:

%Vor%     
___ qstntxt ___

War es interessant zu wissen, warum statische Elementfunktionen nicht als const oder volatile oder const volatile erklärt werden können?

%Vor%     
___ qstnhdr ___ C ++: Warum können statische Funktionen nicht als const oder volatile oder const volatile erklärt werden [duplizieren] ___
jpalecek 21.10.2012 12:54
quelle
1
___ answer12997997 ___

Weil das der Standard sagt:

9.4.1 Statische Memberfunktionen [class.static.mfct]

  

2) [Hinweis: Eine statische Elementfunktion hat keinen this -Zeiger (9.3.2). -end Notiz] A %code% Mitglied   Funktion darf nicht %code% sein. Es soll keine %code% - und eine nicht - %code% - Memberfunktion geben mit dem   gleicher Name und gleiche Parametertypen (13.1). Eine statische Elementfunktion darf nicht als %code% deklariert werden.    %code% oder %code% . (Betonung meiner)

Der Grund dafür ist, dass eine %code% (oder %code% oder %code% ) %code% Methode keinen Sinn ergibt (im traditionellen Sinne, siehe unten). Zum Beispiel bedeutet %code% , dass Sie die Mitglieder des Objekts nicht ändern können, aber im Falle der Statik gibt es kein Objekt, über das Sie sprechen könnten.

Sie könnten argumentieren, dass ein %code% %code% auf andere %code% -Mitglieder angewendet werden könnte, aber diese Option wurde als sinnlos angesehen.

    
___ antwort12997987 ___

Die cv-Modifier der Member-Funktionen entsprechen der Qualifikation des versteckten %code% -Parameters.

%code% Funktionen haben keinen %code% Parameter. Daher benötigen sie keine CV-Qualifier. Also wurde entschieden (IMHO zu Recht, da es sonst keine Bedeutung hätte), sie auf %code% -Funktionen zu verbieten.

BTW %code% -Memberfunktionen können auch nicht %code% , rein ( %code% ), gelöscht, default, %code% etc.

sein     
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ answer12998099 ___

Es gibt kein "aktuelles Objekt" beim Ausführen einer statischen Funktion, so dass es wenig Sinn macht, über statische Funktionen zu sprechen, die %code% sind oder nicht.

Beachten Sie, dass Sie eine %code% -Funktion mit einer Instanz aufrufen können, aber das ist nur ein seltsames C ++ "Feature" (manchmal praktisch, weil es in C ++ 03 schwer war, den Typ eines Wertes zu erhalten).

%Vor%

Ich kann verstehen, dass Sie "const static functions" beschreiben möchten, die kein statisches Datenelement ändern und auch nur andere statische const-Funktionen aufrufen können.

Aber diese Unterscheidung ist in C ++ nicht vorhanden.

    
___ antwort12998038 ___

Statische Elementfunktionen sind globale, freie Funktionen, die nicht von einem Objekt (d. h. einer Klasseninstanz) abhängen. Die CV-Qualifikationsmerkmale für nicht statische Memberfunktionen beziehen sich auf den Typ des -Objekts , auf dem sie aufgerufen werden, und dieser Begriff trifft einfach nicht auf statische Memberfunktionen zu.

Beispiel:

%Vor%     
___ qstntxt ___

War es interessant zu wissen, warum statische Elementfunktionen nicht als const oder volatile oder const volatile erklärt werden können?

%Vor%     
___ qstnhdr ___ C ++: Warum können statische Funktionen nicht als const oder volatile oder const volatile erklärt werden [duplizieren] ___
Kerrek SB 21.10.2012 13:02
quelle
1

Es gibt kein "aktuelles Objekt" beim Ausführen einer statischen Funktion, so dass es wenig Sinn macht, über statische Funktionen zu sprechen, die const sind oder nicht.

Beachten Sie, dass Sie eine static -Funktion mit einer Instanz aufrufen können, aber das ist nur ein seltsames C ++ "Feature" (manchmal praktisch, weil es in C ++ 03 schwer war, den Typ eines Wertes zu erhalten).

%Vor%

Ich kann verstehen, dass Sie "const static functions" beschreiben möchten, die kein statisches Datenelement ändern und auch nur andere statische const-Funktionen aufrufen können.

Aber diese Unterscheidung ist in C ++ nicht vorhanden.

    
6502 21.10.2012 13:11
quelle

Tags und Links