Lambda-Ausdruckstypableitung mit „auto“ in C 11
In C 11 sind Lambdas eine leistungsstarke Funktion, die es Programmierern ermöglicht, anonym zu definieren Funktionen. Durch die Verwendung des Schlüsselworts „auto“ zum Ableiten des Typs eines Lambda entsteht ein weit verbreitetes Missverständnis, dass Lambdas vom Typ Funktionszeiger sind.
Die Natur von Lambdas
Allerdings , diese Annahme ist falsch. Der zugrunde liegende Typ eines Lambda-Ausdrucks ist nicht explizit definiert. Stattdessen sind Lambdas typischerweise syntaktischer Zucker für Funktoren. Ein Lambda wird direkt in ein Funktorobjekt übersetzt, wobei Elemente in den Klammern [] zu Konstruktorparametern und Objektmitgliedern werden, während Parameter in den Klammern () zu Parametern für den Operator() des Funktors werden.
Lambda Konvertierung in Funktionszeiger
Lambdas, die keine Variablen erfassen, können tatsächlich in Funktionszeiger konvertiert werden. Diese Konvertierung wird vom Standard unterstützt, jedoch nicht von allen Compilern (z. B. MSVC2010). Diese Konvertierung impliziert jedoch nicht, dass der tatsächliche Typ des Lambda ein Funktionszeiger ist.
Schlussfolgerung
Der Typ eines mit „auto“ abgeleiteten Lambda-Ausdrucks ist nicht spezifiziert Funktortyp. Während Lambdas, die keine Variablen erfassen, in Funktionszeiger konvertiert werden können, ist es wichtig zu verstehen, dass diese Konvertierung nicht ihrem wahren zugrunde liegenden Typ entspricht.
Das obige ist der detaillierte Inhalt vonIst der mit „auto' abgeleitete Typ eines C 11-Lambda-Ausdrucks ein Funktionszeiger?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!