Heim > Artikel > Backend-Entwicklung > Warum kann ich Funktionen nicht basierend auf der Konstanz von Nicht-Zeiger-/Nicht-Referenz-Argumenten in C überladen?
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; };
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!