Heim > Backend-Entwicklung > C++ > Wie beeinflussen gelöschte Funktionen in C 11 die Überlastungsauflösung?

Wie beeinflussen gelöschte Funktionen in C 11 die Überlastungsauflösung?

Mary-Kate Olsen
Freigeben: 2024-12-15 15:22:24
Original
374 Leute haben es durchsucht

How Do Deleted Functions in C  11 Influence Overload Resolution?

Ü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);
};
Nach dem Login kopieren

Wenn delete die Funktion vollständig entfernt hätte, würde die = delete-Syntax effektiv äquivalent sein zu:

struct onlydouble2 {
  onlydouble2(double);
};
Nach dem Login kopieren

Mit dieser Änderung wäre der folgende Code legal:

onlydouble2 val(20);
Nach dem Login kopieren

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:

  • Es gibt eine spezielle Grammatik für Funktionen löschen („Das verbiete ich“)
  • Implizit definierte Funktionen (z. B. Kopierkonstruktor) existieren von Standard
  • Die Überlastungsauflösung behandelt die „Existenz“ der Funktion, indem sie Nichtübereinstimmungen oder Mehrdeutigkeiten identifiziert.
  • Der Hauptzweck gelöschter Funktionen besteht darin, die Überlastungsauflösung zu steuern, und nicht darauf hinzuweisen, dass sie nicht vorhanden ist

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!

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