Heim >Backend-Entwicklung >C++ >Welchen Typ leitet „auto' für einen C 11-Lambda-Ausdruck ab?
Untersuchung des Typs der Lambda-Ableitung mit „auto“ in C 11
Entgegen der falschen Vorstellung, dass der Typ eines Lambda ein Funktionszeiger ist, Ein kürzlich durchgeführter Test hat ein unerwartetes Ergebnis ergeben. Beim Versuch, einen Lambda-Ausdruck sowohl einem Funktionszeiger als auch einer „auto“-Variablen zuzuweisen, schlägt eine Zusicherung fehl. Dies wirft die Frage auf: Was ist der wahre Typ eines Lambda, wenn es mit dem Schlüsselwort „auto“ abgeleitet wird?
Zur Verdeutlichung: Lambda-Ausdrücke sind praktisch syntaktische Abkürzungen für Funktoren. Bei der Kompilierung wird ein Lambda in ein Funktorobjekt umgewandelt. Elemente innerhalb der []-Klammern werden zu Konstruktorparametern und Funktor-Membervariablen, während Parameter innerhalb der ()-Klammern in die Operator()-Parameter des Funktors übersetzt werden.
Auffällig ist, dass Lambdas, die keine Variablen erfassen (d. h. solche ohne Elemente darin). das []) kann in Funktionszeiger umgewandelt werden (obwohl diese Konvertierung von MSVC2010 nicht unterstützt wird). Es ist jedoch wichtig zu betonen, dass der intrinsische Typ eines Lambda ein nicht spezifizierter Funktortyp bleibt.
Im bereitgestellten Codebeispiel wird der Lambda-Ausdruck LAMBDA zunächst einem Funktionszeiger pFptr und dann einem „auto“ zugewiesen " Variable pAuto. Die nachfolgende Behauptung überprüft, ob die Typen von pFptr und pAuto gleich sind, was tatsächlich erfolgreich ist. Dies weist darauf hin, dass das Schlüsselwort „auto“ den Typ des Lambda erfolgreich als Funktionszeiger ableitet, was eine nahtlose Zuweisung zu pFptr ermöglicht.
Dennoch ist die wichtigste Erkenntnis, dass Lambdas von Natur aus nicht spezifizierte Funktortypen sind, unabhängig davon ihre Fähigkeit, in Funktionszeiger umgewandelt zu werden. Diese Unterscheidung unterstreicht die Flexibilität und Komplexität von Lambda-Ausdrücken in der modernen C-Programmierung.
Das obige ist der detaillierte Inhalt vonWelchen Typ leitet „auto' für einen C 11-Lambda-Ausdruck ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!