Überladungsauflösung in C 11 mit gelöschten Funktionen
C 11 ermöglicht die Verwendung der = delete-Syntax, um Funktionen als „gelöscht“ zu markieren. " Diese Syntax verhindert, dass der Compiler den Funktionskörper generiert, und verhindert seinen direkten Aufruf. Diese gelöschten Funktionen nehmen jedoch weiterhin an der Überlastungsauflösung teil, einem Prozess, der anhand einer Reihe von Eingabeparametern die am besten geeignete aufzurufende Funktion bestimmt.
Warum ist diese Funktion nützlich? Warum werden gelöschte Funktionen ausgeblendet, anstatt vollständig aus dem Code entfernt zu werden?
Der Hauptgrund besteht darin, bestimmte Überladungen basierend auf Parametertypen zu deaktivieren. Durch die Teilnahme an der Überlastungsauflösung verhindern gelöschte Funktionen implizite Konvertierungen, die zu unbeabsichtigtem Verhalten führen könnten. Betrachten Sie das folgende Beispiel:
struct onlydouble { onlydouble(std::intmax_t) = delete; onlydouble(double); };
Wenn delete die Funktion vollständig entfernt hätte, würde die = delete-Syntax effektiv äquivalent sein zu:
struct onlydouble2 { onlydouble2(double); };
Mit dieser Änderung wäre der folgende Code legal:
onlydouble2 val(20);
Der Compiler würde versuchen, das ganzzahlige Literal 20 implizit in ein Double umzuwandeln, bevor er den Konstruktor aufruft, der a akzeptiert double.
Im Gegensatz dazu würde der Compiler im Originalbeispiel mit dem gelöschten Konstruktor eine genaue Übereinstimmung zwischen den Funktionsparametern (std::intmax_t) und dem Argument (20) erkennen. Es würde dann einen Fehler auslösen, weil eine gelöschte Funktion zum Aufruf ausgewählt wurde.
Die = delete-Syntax ermöglicht daher eine stärkere Kontrolle darüber, welche Funktionen basierend auf Parametertypen aufgerufen werden. Es verhindert implizite Konvertierungen, die zu unbeabsichtigten Konsequenzen führen könnten.
Darüber hinaus ist das Konzept „dies existiert nicht“ in der C-Spezifikation nicht erforderlich, weil:
Das obige ist der detaillierte Inhalt vonWie beeinflussen gelöschte Funktionen in C 11 die Überlastungsauflösung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!