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); };
Wenn = delete die Funktion vollständig entfernt hätte, hätte sie dasselbe Wirkung wie folgt:
struct onlydouble2 { onlydouble2(double); };
In diesem Fall wäre der folgende Code gültig:
onlydouble2 val(20);
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!