Heim > Artikel > Backend-Entwicklung > Wie führt der C++-Lambda-Ausdruck eine Typinferenz durch?
Typinferenz von C++-Lambda-Ausdrücken ermöglicht es dem Compiler, den Rückgabewerttyp des Lambda zu bestimmen: Wenn der Lambda nur eine Rückgabeanweisung hat, ist der Rückgabewerttyp der Typ des Rückgabeausdrucks. Wenn ein Lambda über mehrere Rückgabeanweisungen verfügt, ist der Rückgabetyp einer dieser Typen (der Compiler gibt möglicherweise eine Warnung aus). Wenn keine Return-Anweisung vorhanden ist, ist der Rückgabewerttyp void.
Typinferenz für Lambda-Ausdrücke in C++
Lambda-Ausdrücke sind eine leistungsstarke syntaktische Funktion in C++, die die Erstellung anonymer Funktionen zur Laufzeit ermöglicht. Die Typinferenz für Lambda-Ausdrücke ist eine Schlüsselfunktion, die es dem Compiler ermöglicht, den Rückgabewerttyp eines Lambda-Ausdrucks zu bestimmen.
Syntax
Lambda-Ausdrücke werden normalerweise mit der folgenden Syntax definiert:
auto lambda = [capture list] (parameter list) -> return-type { // lambda function body }
wobei:
[capture list]
eine optionale Capture-Liste ist, die angibt, worauf der Lambda-Ausdruck extern zugreifen kann Variablen. [capture list]
是一个可选的捕获列表,指定 lambda 表达式可以访问的外部变量。(parameter list)
是一个可选的参数列表,指定 lambda 表达式接收的参数。-> return-type
是一个可选的返回类型指定符,指定 lambda 表达式的返回值类型。类型推断
如果未指定返回值类型,编译器将尝试根据 lambda 表达式中的以下规则推断它:
return
语句,则返回值类型为 return
表达式的类型。return
语句,但它们返回不同类型的值,则返回值类型为这些类型中的任何一个。在这种情况下,编译器可能会发出警告。return
语句,则返回值类型为 void
。实战案例
案例 1:使用类型推断
以下 lambda 表达式使用类型推断,返回值类型为 int
:
auto lambda = [] (int a, int b) { return a + b; };
案例 2:指定返回值类型
以下 lambda 表达式显式指定返回值类型为 std::string
:
auto lambda = [] (std::string a, std::string b) -> std::string { return a + b; };
案例 3:推断多重返回类型
以下 lambda 表达式包含两个 return
语句,返回类型推断为 int
或 std::string
(parameter list)
ist eine optionale Parameterliste, die die vom Lambda-Ausdruck empfangenen Parameter angibt.
-> return-type
ist ein optionaler Rückgabetypbezeichner, der den Rückgabewerttyp des Lambda-Ausdrucks angibt. 🎜🎜Typinferenz🎜🎜🎜Wenn der Rückgabewerttyp nicht angegeben ist, versucht der Compiler, ihn basierend auf den folgenden Regeln in Lambda-Ausdrücken abzuleiten: 🎜return
-Anweisung ist der Rückgabewerttyp der Typ des return
-Ausdrucks. 🎜Wenn ein Lambda-Ausdruck eine oder mehrere return
-Anweisungen enthält, diese jedoch Werte unterschiedlicher Typen zurückgeben, ist der Rückgabewerttyp einer dieser Typen. In diesem Fall gibt der Compiler möglicherweise eine Warnung aus. 🎜Wenn der Lambda-Ausdruck keine return
-Anweisung enthält, ist der Rückgabewerttyp void
. int
: 🎜auto lambda = [] (int a, std::string b) { if (a < 0) { return a; } else { return b; } };🎜🎜 Fall 2: Geben Sie den Rückgabewerttyp an 🎜🎜🎜Der folgende Lambda-Ausdruck gibt den Rückgabewerttyp explizit als
std::string
an: 🎜rrreee🎜🎜Fall 3: Mehrere Rückgabetypen ableiten 🎜🎜🎜 Der folgende Lambda-Ausdruck: Die Formel enthält zwei return
-Anweisungen, und der Rückgabetyp wird als int
oder std::string
abgeleitet: 🎜rrreeeDas obige ist der detaillierte Inhalt vonWie führt der C++-Lambda-Ausdruck eine Typinferenz durch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!