Heim > Backend-Entwicklung > C++ > Wie führt der C++-Lambda-Ausdruck eine Typinferenz durch?

Wie führt der C++-Lambda-Ausdruck eine Typinferenz durch?

WBOY
Freigeben: 2024-06-03 13:41:57
Original
972 Leute haben es durchsucht

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.

C++ Lambda 表达式如何进行类型推断?

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
}
Nach dem Login kopieren

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 表达式中的以下规则推断它:

  1. 如果 lambda 表达式包含一条 return 语句,则返回值类型为 return 表达式的类型。
  2. 如果 lambda 表达式包含一个或多个 return 语句,但它们返回不同类型的值,则返回值类型为这些类型中的任何一个。在这种情况下,编译器可能会发出警告。
  3. 如果 lambda 表达式不包含 return 语句,则返回值类型为 void

实战案例

案例 1:使用类型推断

以下 lambda 表达式使用类型推断,返回值类型为 int

auto lambda = [] (int a, int b) {
    return a + b;
};
Nach dem Login kopieren

案例 2:指定返回值类型

以下 lambda 表达式显式指定返回值类型为 std::string

auto lambda = [] (std::string a, std::string b) -> std::string {
    return a + b;
};
Nach dem Login kopieren

案例 3:推断多重返回类型

以下 lambda 表达式包含两个 return 语句,返回类型推断为 intstd::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: 🎜
    🎜Wenn der Lambda-Ausdruck enthält Bei einer 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.
🎜🎜Praktischer Fall🎜🎜🎜🎜Fall 1: Typinferenz verwenden🎜🎜🎜Der folgende Lambda-Ausdruck verwendet Typinferenz und der Rückgabewerttyp ist int: 🎜
auto lambda = [] (int a, std::string b) {
    if (a < 0) {
        return a;
    } else {
        return b;
    }
};
Nach dem Login kopieren
🎜🎜 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: 🎜rrreee

Das 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!

Verwandte Etiketten:
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage