Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Lambda-funksjoner | Noen Avanserte Emner
C++-Funksjoner

Lambda-funksjoner

Sveip for å vise menyen

Lambda-funksjoner, eller anonyme funksjoner, er en funksjon som lar deg lage små, navnløse funksjoner direkte i koden din. De er spesielt nyttige når du trenger en enkel funksjon for en kort periode og ikke ønsker å definere en egen navngitt funksjon.

Lambda-funksjoner er nyttige av flere grunner:

Konsishet
expand arrow

Lambda-funksjoner lar deg skrive kort og konsis kode. De er ideelle for operasjoner som kan uttrykkes på noen få linjer.

Lokalt omfang
expand arrow

De kan fange opp variabler fra det omkringliggende omfanget, slik at du kan bruke variabler fra foreldrefunksjonen inne i lambdaen.

Fleksibilitet
expand arrow

Lambdaer kan sendes som argumenter til andre funksjoner, noe som gjør dem praktiske for funksjoner som std::for_each, std::sort osv.

Hvordan lage en lambda-funksjon?

Du kan bruke følgende syntaks for å lage en lambda-funksjon.

lambda_function.h

lambda_function.h

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

En capture-klausul i en lambda-funksjon lar deg spesifisere hvilke variabler fra det omkringliggende omfanget (utenfor lambda-funksjonen) som kan nås og brukes inne i lambda-funksjonen. Det finnes 3 vanlige typer capture-klausuler:

  • Ingen variabler fanges []: lambda-funksjonen kan ikke få tilgang til noen variabler fra det omkringliggende omfanget;

  • Spesifikke variabler fanges etter verdi [var1, var2, ...]: lambda-funksjonen kan få tilgang til spesifikke variabler fra det omkringliggende omfanget etter verdi;

  • Spesifikke variabler fanges som referanse [&var1, &var2, ...]: lambda-funksjonen kan få tilgang til spesifikke variabler fra det omkringliggende omfanget som referanse.

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; }

Funksjonen er konstruert slik:

  • Lambda-funksjonen fanger variabelen multiplier med referanse [&multiplier];

  • Returtypen -> int angir at lambda-funksjonen returnerer et heltall;

  • Lambdaen blir umiddelbart kalt med argumentet 5, og resultatet lagres i variabelen result.

question mark

Hva er formålet med et fangstklammer i en lambda-funksjon?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 4

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 4. Kapittel 4
some-alt