Heim > Backend-Entwicklung > C++ > Hauptteil

Warum können statische Funktionen in C nicht mit nichtstatischen Funktionen überladen werden?

Mary-Kate Olsen
Freigeben: 2024-10-27 11:12:30
Original
739 Leute haben es durchsucht

Why Can't Static Functions Be Overloaded with Non-Static Functions in C  ?

Statische Funktionen können in C nicht mit nichtstatischen Funktionen überladen werden

Während viele Programmiersprachen das Überladen von Funktionen basierend auf statischen oder Instanzmethoden zulassen , C verbietet dieses Verhalten ausdrücklich. Der C-Standard 13.1/2 besagt, dass Mitgliedsfunktionen mit demselben Namen und denselben Parametertypen nicht überladen werden können, wenn eine davon statisch ist.

<code class="cpp">class X {
    static void f();
    void f();
};</code>
Nach dem Login kopieren

Im obigen Beispiel werden die beiden Deklarationen von f() berücksichtigt vom Standard schlecht geformt.

Mehrdeutigkeit beim Aufruf statischer Funktionen auf Instanzen

Selbst wenn in diesem Szenario eine Funktionsüberladung zulässig wäre, gäbe es immer noch Unklarheiten beim Aufruf von a statische Funktion auf einer Instanz. Der C-Standard 9.4/2 erlaubt den Aufruf statischer Mitglieder sowohl mit der qualifizierten ID (z. B. X::f()) als auch mit der Zugriffssyntax für Klassenmitglieder (z. B. g().reschedule()). Daher ist im folgenden Code unklar, ob die statische oder nicht statische print()-Funktion aufgerufen werden soll:

<code class="cpp">class Foo {
    void print() { cout << "nonstatic" << endl; }
    static void print() { cout << "static" << endl; }
};

Foo f;
f.print(); // Ambiguous: static or non-static?</code>
Nach dem Login kopieren

Überprüfen, ob eine Funktion statisch aufgerufen wird

Anders als in PHP, wo Sie überprüfen können, ob diese Variable definiert ist, um festzustellen, ob eine Funktion statisch aufgerufen wird, bietet C diese Funktion nicht. Das Schlüsselwort this verweist immer auf ein Objekt und ist nie NULL, sodass Sie es nicht zur Unterscheidung zwischen statischen und Instanzaufrufen verwenden können.

Das obige ist der detaillierte Inhalt vonWarum können statische Funktionen in C nicht mit nichtstatischen Funktionen überladen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!