2017-09-15 4 views
3

Was unterscheidet statische Elementfunktion und globale Funktion?Was unterscheidet statische Elementfunktion und globale Funktion?

void globalFunc() 
{ 
} 

class Test 
{ 
    public: 
    //In grammar side, object's not own this function 
    static void staticFunc(); 
}; 

Die statische Member-Funktion ist global Funktion aber, es mit Bedeutung und begrenzen Zugriffsbereich klassifizieren kann.

Aber ich kann nicht verstehen, warum die Aufrufkonvention der statischen Mitgliedsfunktion ein [dieser Anruf] ist.

Ich verstehe, dass normale Member-Funktion muss [dieser Aufruf], weil es muss die Adresse des Aufrufer-Objekts, aber, warum die statische Member-Funktion hat eine dieser Aufruf Konvention? Ich denke, dass es die Adresse des Anrufers nicht braucht, weil es die Funktion des Objekts nicht ist. Gibt es einen Unterschied zwischen statischer Elementfunktion und globaler Funktion? (Nicht in Grammatik Seite aber auch Low-Side)

+1

Tut mir leid, '[dieser Anruf]'? – Charles

+0

Eine statische Elementfunktion kann aufgerufen werden, als wäre sie eine nicht statische Elementfunktion (die "this" in der Funktion nicht verfügbar macht). Eine statische Elementfunktion kann nicht "extern" C "' sein. Formal bedeutet das, dass Sie es nicht portabel als C-Callback verwenden können, aber wenige Compiler haben diese unpraktischen Vorgaben. –

+0

Aufrufkonventionen sind Implementierungen definiert. Auf welche Implementierung beziehen Sie sich? –

Antwort

5

Statische Klassenfunktionen können

  • Zugang private und statische Datenelemente geschützt innerhalb einer Klasse.
  • Zugriff auf private und geschützte statische Funktionen.
  • Zugriff auf private und geschützte Datenelemente pro Instanz innerhalb einer Klasse , wenn die statische Funktion eine Instanz der Klasse hat.
  • Zugriff auf private und geschützte pro Instanz Funktionen , wenn die statische Funktion eine Instanz der Klasse hat.
  • Schattenfunktionen mit dem gleichen Namen in Basisklassen.
  • Zugriff geschützte Daten und Funktionen in Basisklassen.

Globale Nicht-Freund-Funktionen können keine von denen tun.

+2

Sie sollten hinzufügen, dass nur auf statische Mitglieder und Funktionen zugegriffen werden kann. – FilipRistic

+0

@ArnavBorborah Die ersten beiden Punkte sind tatsächlich richtig. – juanchopanza

+0

@FilipRistic: Andere auch, aber Sie müssen Instanz der Klasse bereitstellen. – Jarod42

Verwandte Themen