Heim >Backend-Entwicklung >C++ >Warum sind gelöschte Funktionen in C 11 an der Überlastungslösung beteiligt?

Warum sind gelöschte Funktionen in C 11 an der Überlastungslösung beteiligt?

Linda Hamilton
Linda HamiltonOriginal
2024-12-15 12:36:10125Durchsuche

Why Do Deleted Functions in C  11 Participate in Overload Resolution?

Warum gelöschte Funktionen an der Überlastungsauflösung in C 11 beteiligt sind

In C 11 werden gelöschte Funktionen nicht vollständig gelöscht, sondern nehmen stattdessen an der Überlastungsauflösung teil. Diese Funktion dient zwei Hauptzwecken.

Verhindern impliziter Konvertierungen

Der halbe Nutzen der „= delete“-Syntax besteht darin, Aufrufer daran zu hindern, bestimmte Funktionen mit bestimmten Parametern aufzurufen Typen. Sein Ziel besteht darin, implizite Konvertierungen in bestimmten Szenarien zu verhindern. Damit eine bestimmte Überladung nicht zulässig ist, muss sie an der Überladungsauflösung teilnehmen.

Sicherstellung des expliziten Aufrufs

Wenn die Syntax „= delete“ die Funktion vollständig löschen würde, es wäre im Wesentlichen gleichbedeutend damit, die Erklärung ganz wegzulassen. Dies würde Szenarios ermöglichen wie:

onlydouble val(20); // Legal in C++

Der Compiler würde alle Konstruktoren berücksichtigen und eine implizite Konvertierung identifizieren, die es ihm ermöglicht, den für doppelte Parameter vorgesehenen Konstruktor aufzurufen.

Im Gegensatz dazu würde mit „= delete“ beteiligt sich an der Überladungsauflösung:

onlydouble val(20); // Error in C++

Der Compiler wertet alle Konstruktoren aus, einschließlich des gelöschten. Es entdeckt eine genaue Übereinstimmung für das ganzzahlige Literal und gibt einen Fehler aus, weil versucht wurde, eine gelöschte Funktion aufzurufen.

Klärung der Rolle von „= delete“

Das „ = delete“-Syntax bedeutet „Das verbiete ich“, nicht nur „Das existiert nicht.“ Es ist eine stärkere Aussage mit spezifischen Implikationen. Wir benötigen keine eindeutige Syntax für „dies existiert nicht“, da dies durch das Weglassen der Deklaration bereits impliziert wird.

In seltenen Fällen kann es zu bestimmten Regelmehrdeutigkeiten kommen, weil es keine klare Möglichkeit gibt, anzugeben, dass dies nicht der Fall ist Der Kopierkonstruktor existiert nicht. Allerdings sind spezielle Konstruktoren wie der Kopierkonstruktor klasseninhärent. Anstatt darauf hinzuweisen, dass sie nicht existieren, geht es um die Frage, ob es legal ist, sie aufzurufen.

Schlussfolgerung

Gelöschte Funktionen in C 11 beteiligen sich an der Überlastungslösung, um sie zu erleichtern Klare Fehlerberichte und erzwingen Sie einen expliziten Funktionsaufruf. Dies ermöglicht es Entwicklern, mehrdeutige und unbeabsichtigte Konvertierungen zu verhindern und die Korrektheit und Klarheit des Programms sicherzustellen.

Das obige ist der detaillierte Inhalt vonWarum sind gelöschte Funktionen in C 11 an der Überlastungslösung beteiligt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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