Ü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>
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>
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!