Funktionen mit const-Argumenten und Überladung verstehen
Bei der Programmierung ermöglicht Überladung die Koexistenz mehrerer Funktionen mit demselben Namen, aber unterschiedlichen Parametern Klasse. Beim Versuch einer Überladung basierend auf der Konstanz eines Nicht-Zeiger- und Nicht-Referenztyps tritt jedoch ein Compilerfehler auf. In diesem Artikel werden der Grund für diese Einschränkung und alternative Ansätze untersucht.
Betrachten Sie das folgende Codefragment:
class Test { public: Test() {} int foo(const int) const; int foo(int); };
Beim Kompilieren dieses Codes gibt der Compiler einen Fehler aus, der darauf hinweist, dass die Funktion foo dies nicht kann überlastet sein. Dies liegt daran, dass die Konstanz eines Nicht-Zeiger- und Nicht-Referenztyps keinen Einfluss auf die Funktionssignatur hat. Im obigen Beispiel haben beide Funktionen die gleiche Signatur: int foo(int).
Um zu verstehen, warum diese Einschränkung besteht, betrachten Sie die folgende Situation:
Test obj; int variable = 0; obj.foo(3); // Calls the const function obj.foo(variable); // Intends to call the non-const function
Wenn Überladung basierend zulässig wäre Aufgrund der Konstanz könnte der Compiler nicht bestimmen, welche Funktion aufgerufen werden soll, wenn obj.foo(variable) aufgerufen wird. Dies liegt daran, dass bei der Wertübergabe der Wert kopiert wird und die const-Bezeichnung für den Funktionsaufruf irrelevant ist.
Daher ist eine Überladung basierend auf der Konstanz eines Nicht-Zeiger- und Nicht-Referenztyps nicht zulässig in C. Alternativ könnte man zwei separate Funktionen mit unterschiedlichen Namen erstellen, zum Beispiel:
class Test { public: Test() {} int fooConst(const int); int fooNonConst(int); };
Das obige ist der detaillierte Inhalt vonWarum können wir Funktionen nicht basierend auf dem „const'-Qualifizierer für Nicht-Zeiger- und Nicht-Referenztypen überladen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!