Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lambda-Funktioner | Nogle Avancerede Emner
C++ Funktioner

Lambda-Funktioner

Stryg for at vise menuen

Lambda-funktioner, eller anonyme funktioner, er en funktionalitet, der gør det muligt at oprette små, unavngivne funktioner direkte i din kode. De er særligt nyttige, når du har brug for en simpel funktion i en kort periode og ikke ønsker at definere en separat navngiven funktion.

Lambda-funktioner er nyttige af flere grunde:

Kompakthed
expand arrow

Lambda-funktioner gør det muligt at skrive kort og præcis kode. De er ideelle til operationer, der kan udtrykkes på få linjer.

Lokalt scope
expand arrow

De kan fange variabler fra det omgivende scope, hvilket gør det muligt at bruge variabler fra den overordnede funktion inden for lambdaen.

Fleksibilitet
expand arrow

Lambdas kan videregives som argumenter til andre funktioner, hvilket gør dem praktiske til funktioner som std::for_each, std::sort osv.

Hvordan opretter man en lambda-funktion?

Du kan bruge følgende syntaks til at oprette en lambda-funktion.

lambda_function.h

lambda_function.h

123
[capture_clause](parameter_list) -> return_type { // function body }

En capture-klausul i en lambda-funktion gør det muligt at angive, hvilke variable fra det omgivende scope (uden for lambda-funktionen) der kan tilgås og bruges inden i lambda-funktionen. Der findes 3 almindelige typer af capture-klausuler:

  • Ingen capture []: lambda-funktionen kan ikke tilgå nogen variable fra det omgivende scope;

  • Capture af specifikke variable ved værdi [var1, var2, ...]: lambda-funktionen kan tilgå specifikke variable fra det omgivende scope ved værdi;

  • Capture af specifikke variable ved reference [&var1, &var2, ...]: lambda-funktionen kan tilgå specifikke variable fra det omgivende scope ved reference.

main.cpp

main.cpp

1234567891011121314
#include <iostream> int main() { int multiplier = 2; // Lambda function capturing `multiplier` by reference // With explicit return type (`int`) int result = [&multiplier](int num) -> int { return num * num * multiplier; }(5); // Invoking the lambda with argument 5 std::cout << result << std::endl; }

Funktionen konstrueres som følger:

  • Lambda-funktionen fanger variablen multiplier ved reference [&multiplier];

  • Returtypen -> int angiver, at lambda-funktionen returnerer et heltal;

  • Lambdaen bliver straks kaldt med argumentet 5, og resultatet gemmes i variablen result.

question mark

Hvad er formålet med en capture-sætning i en lambda-funktion?

Vælg det korrekte svar

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 4

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Sektion 4. Kapitel 4
some-alt