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

Warum sind gelöschte C 11-Funktionen immer noch an der Überlastungslösung beteiligt?

Linda Hamilton
Freigeben: 2024-12-23 10:13:18
Original
282 Leute haben es durchsucht

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

Warum die überladene Auflösung C 11-gelöschte Funktionen enthält

C 11 führte die = delete-Syntax ein, die Funktionen als „gelöscht“ markiert und so verhindert ihre Anrufung. Dies wirft die Frage auf, warum diese Funktionen immer noch an der Überlastungsauflösung beteiligt sind, anstatt vollständig eliminiert zu werden.

Der Hauptzweck von = delete besteht darin, den Aufruf bestimmter Funktionen mit bestimmten Parametern zu verhindern. Ziel ist es, implizite Konvertierungen zu verbieten, insbesondere in Szenarien, in denen sie zu unbeabsichtigten Folgen führen könnten. Folglich ist die Teilnahme an der Überlastungsauflösung für = delete unerlässlich, um bestimmte Überladungen effektiv zu verbieten.

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, hätte sie dasselbe Wirkung wie folgt:

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

In diesem Fall wäre der folgende Code gültig:

onlydouble2 val(20);
Nach dem Login kopieren

Der Compiler würde Versuchen Sie, den Konstruktor aufzurufen, der eine Ganzzahl akzeptiert, würde aber implizit 20 in ein Double konvertieren und den Konstruktor, der ein Double akzeptiert, erfolgreich aufrufen.

Allerdings mit = delete der Aufruf des onlydouble-Konstruktors, der einen intmax_t akzeptiert ist ausdrücklich verboten. Der Compiler versucht keine impliziten Konvertierungen und gibt stattdessen einen Fehler aus, der die Verwendung dieser verbotenen Überladung verhindert.

Darüber hinaus impliziert = delete „Ich verbiete dies“ und nicht „das existiert nicht“. Die C-Spezifikation definiert nicht das Konzept einer „nicht existierenden“ Funktion. Stattdessen bietet es einen Mechanismus, um bestimmte Aufrufe explizit zu verbieten, sodass der Programmierer das Verhalten des Compilers steuern und unerwünschte implizite Konvertierungen verhindern kann.

Das obige ist der detaillierte Inhalt vonWarum sind gelöschte C 11-Funktionen immer noch an der Überlastungslösung beteiligt?. 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