Heim >Backend-Entwicklung >C++ >Können statische und nichtstatische Funktionen in C überladen werden?

Können statische und nichtstatische Funktionen in C überladen werden?

Linda Hamilton
Linda HamiltonOriginal
2024-10-28 18:58:30561Durchsuche

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

Statische und nichtstatische Funktionen in C überladen

In C ist es nicht möglich, eine statische Funktion mit einer nichtstatischen zu überladen Funktion aufgrund des expliziten Verbots im C-Standard. Dies ist im ISO 14882:2003 C-Standard 13.1/2 festgelegt, der festlegt, dass Member-Funktionsdeklarationen mit demselben Namen und denselben Parametertypen nicht überladen werden können, wenn es sich bei einer davon um statische Member-Funktionsdeklarationen handelt.

Mehrdeutigkeit mit statischem Funktionsaufruf

Darüber hinaus ist in C der Aufruf einer statischen Funktion auf einer Instanz möglich. Gemäß ISO 14882:2003 C Standard 9.4/2 kann auf ein statisches Mitglied s der Klasse statisches Mitglied.

Dies führt zu Mehrdeutigkeiten beim Aufruf statischer Funktionen auf Instanzen. Betrachten Sie das folgende Beispiel:

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

In diesem Beispiel ist der Aufruf von f.print() mehrdeutig, da unklar ist, ob die statische oder nicht statische print()-Funktion aufgerufen werden soll. Während der C-Standard den Aufruf statischer Memberfunktionen über diese Syntax zulässt, führt das Vorhandensein einer nicht statischen Funktion mit demselben Namen zu Mehrdeutigkeiten.

Prüfung auf statischen Funktionsaufruf

Im Gegensatz zu PHP bietet C keine direkte Möglichkeit zu prüfen, ob eine Funktion statisch aufgerufen wird oder nicht. Das Schlüsselwort this, das auf das Objekt verweist, für das die Funktion aufgerufen wurde, verweist immer auf ein Objekt, sodass nicht festgestellt werden kann, ob die Funktion statisch aufgerufen wird oder nicht.

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

Stellungnahme:
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