Heim > Backend-Entwicklung > C++ > Hauptteil

Warum kann ich Funktionen nicht basierend auf der Konstanz von Nicht-Zeiger-/Nicht-Referenz-Argumenten in C überladen?

Linda Hamilton
Freigeben: 2024-11-20 11:40:41
Original
305 Leute haben es durchsucht

Why Can't I Overload Functions Based on the Constness of Non-Pointer/Non-Reference Arguments in C  ?

Funktionen mit Const-Argumenten überladen

In C ermöglicht das Überladen von Funktionen die Verwendung mehrerer Funktionen mit demselben Namen, abhängig von den übergebenen Argumenten ihnen. In bestimmten Situationen ist das Überladen einer Funktion jedoch ausschließlich auf der Grundlage der Konstanz eines Nicht-Zeiger- und Nicht-Referenztyps nicht möglich.

Bedenken Sie den folgenden Codeausschnitt:

class Test {
public:
    int foo(int);
    int foo(const int) const;
};
Nach dem Login kopieren

In In diesem Beispiel wollen wir die Funktion foo überladen, wobei eine Funktion eine konstante Funktion ist und die andere nicht. Dieser Code führt jedoch zu einem Kompilierungsfehler, der besagt, dass die Funktion nicht überladen werden kann.

Warum passiert das?

Der Compiler kann trotz des Vorhandenseins des const-Schlüsselworts nicht eindeutig unterscheiden, welche Funktion aufgerufen werden soll das Argument. Bei der Übergabe als Wert wird der Wert unabhängig von der Konstanz des Arguments kopiert. Daher ist die Konstante des Arguments nur innerhalb der Funktionsdefinition selbst relevant.

Daher kann der Compiler nicht allein anhand der Konstanz des Arguments bestimmen, welche Version der foo-Funktion aufgerufen werden soll.

Das obige ist der detaillierte Inhalt vonWarum kann ich Funktionen nicht basierend auf der Konstanz von Nicht-Zeiger-/Nicht-Referenz-Argumenten in C ü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