Heim > Backend-Entwicklung > C++ > Hauptteil

Können statische Funktionen in C mit nichtstatischen Funktionen überladen werden?

Mary-Kate Olsen
Freigeben: 2024-10-26 03:39:02
Original
173 Leute haben es durchsucht

Can Static Functions Be Overloaded with Non-Static Functions in C  ?

Statische Funktionen mit nichtstatischen Funktionen in C überladen

Kontext:

Funktionen überladen mit unterschiedlichen Rückgabetypen wird in C nicht unterstützt, und das Gleiche gilt, wenn versucht wird, eine statische Funktion mit einer nicht statischen Funktion zu überladen. Dieses Szenario wurde in der bereitgestellten Klassendefinition dargestellt, führte jedoch zu einem Fehler.

Standardverbot:

Dieses Verhalten ist durch den C-Standard ausdrücklich verboten (ISO 14882: 2003, Abschnitt 13.1/2):

  • Überladen ist nicht zulässig für Funktionen, die sich nur im Rückgabetyp unterscheiden.
  • Member-Funktionsdeklarationen mit demselben Namen und denselben Parametertypen können nicht überladen werden, wenn „any“ ist eine statische Member-Funktionsdeklaration.

Überlegungen zur Mehrdeutigkeit:

Selbst wenn eine Überladung zulässig wäre, würde dies zu Mehrdeutigkeiten führen, weil:

  • Statische Funktionen können auf Instanzen gemäß dem C-Standard (ISO 14882:2003, Abschnitt 9.4/2) aufgerufen werden.

Zum Beispiel:

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

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

Alternativer Ansatz:

Da es in C nicht möglich ist, festzustellen, ob eine Funktion statisch aufgerufen wird oder nicht, können alternative Methoden verwendet werden, um die gewünschte Funktionalität zu erreichen:

  • Verwenden der Präprozessor zum Definieren von Makros, die zwischen statischen und nicht statischen Aufrufen unterscheiden können.
  • Erstellen Sie separate Funktionen mit unterschiedlichen Namen für statisches und nichtstatisches Verhalten.
  • Verwenden Sie bedingte Anweisungen basierend auf der Anwesenheit oder Abwesenheit eines Objekts (z. B. um den Wert dieses Objekts zu überprüfen). Allerdings kann diese Methode nicht zwischen statischen und Instanzaufrufen unterscheiden.

Das obige ist der detaillierte Inhalt vonKönnen statische Funktionen in C 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!