Heim > Backend-Entwicklung > C++ > Warum können Sie statische und nichtstatische Funktionen in C nicht überladen?

Warum können Sie statische und nichtstatische Funktionen in C nicht überladen?

Susan Sarandon
Freigeben: 2024-10-27 14:16:01
Original
461 Leute haben es durchsucht

Why Can't You Overload Static and Non-Static Functions in C  ?

Überladen statischer Funktionen mit nicht-statischen Funktionen in C

In C ist das Überladen statischer und nicht-statischer Funktionen mit demselben Namen nicht möglich gestattet. Dies ist ausdrücklich im C-Standard festgelegt, der das Überladen von Funktionen verbietet, die sich nur im Rückgabetyp unterscheiden oder denselben Namen und dieselben Parametertypen haben, wenn einer von ihnen statisch ist.

Betrachten Sie die folgende Klasse:

<code class="cpp">class Foo {
    string bla;
    Foo() { bla = "nonstatic"; }

    void print() { cout << bla << endl; }
    static void print() { cout << "static" << endl; }
};</code>
Nach dem Login kopieren

Obwohl diese Klassendefinition plausibel erscheinen mag, ist sie gemäß dem C-Standard ungültig. Das Überladen statischer und nicht statischer Funktionen ist verboten, da dies zu Mehrdeutigkeiten führen würde, da statische Funktionen auch mit der Objekt-Member-Zugriffssyntax (.) aufgerufen werden können.

Zum Beispiel im folgenden Codeausschnitt:

<code class="cpp">Foo f;
f.print();</code>
Nach dem Login kopieren

Es ist unklar, ob die statische Druckfunktion oder die nicht statische Druckfunktion aufgerufen werden soll.

Außerdem bietet C keine Möglichkeit, festzustellen, ob eine Funktion statisch aufgerufen wird oder nicht, wie in PHP. Das Schlüsselwort this, das auf das Objekt verweist, für das die Funktion aufgerufen wird, ist immer ungleich Null.

Zusammenfassung

Überladung statischer und nicht statischer Funktionen mit demselben Namen ist in C nicht erlaubt. Darüber hinaus gibt es keinen Mechanismus zur Unterscheidung zwischen statischen und nicht statischen Funktionsaufrufen innerhalb eines Funktionskörpers.

Das obige ist der detaillierte Inhalt vonWarum können Sie statische und nichtstatische Funktionen in C nicht überladen?. 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