C++ Academy · Lektion

Lambdaudtryk: capture, mutable, generiske parametre

Skriv lambdaer med captures, mutable-semantik og generiske auto-parametre

Lektion 3 af 413 trin

Lambdaudtryk: capture, mutable, generiske parametre er en gratis C++ Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i C++ Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad er en lambdafunktion

En lambdafunktion er et anonymt funktionsobjekt, der er skrevet direkte i koden. Brug den, hvor du ellers ville skrive en lille navngiven funktion eller en struct med operator().

auto square = [](int x) { return x * x; };
std::cout << square(5);   // 25

Syntaksens dele

En lambdafunktion består af fire dele:

  • [capture] – hvilke variable fra det omgivende gyldighedsområde der skal bruges
  • (parameters) – som en funktions parameterliste
  • -> return_type – valgfri og ofte udledt
  • { body }

Tom capture

[] betyder "fang ingenting". Lambdaen tilgår kun globale og statiske variable.

auto add = [](int a, int b) { return a + b; };

Capture efter værdi

Angiv variable i capture-klausulen for at kopiere dem ind i lambdaen.

int n = 5;
auto times = [n](int x) { return x * n; };
n = 10;
std::cout << times(3);   // 15 (captured n was 5)

Capture efter reference

Sæt & foran for at fange efter reference. Ændringer inde i lambdaen påvirker den ydre variabel.

int counter = 0;
auto inc = [&counter]() { ++counter; };
inc(); inc(); inc();
std::cout << counter;   // 3

Standard-captures: [=] og [&]

Fang alt, der bruges, efter værdi med [=] eller efter reference med [&]. Brug det med omtanke, og vær eksplicit, når du kan.

auto f = [=]() { return a + b; };   // copies a, b
auto g = [&]() { return a + b; };   // references a, b

Mutable lambdafunktioner

Som standard er variable, der fanges efter værdi, const inde i lambdaen. Tilføj mutable for at kunne ændre dem – ændringerne påvirker kun kopien i lambdaen.

int n = 5;
auto f = [n]() mutable {
    n += 1;       // OK because of mutable
    return n;
};
f(); f();        // returns 6, then 7
std::cout << n;  // still 5 in outer scope

Udledning af returtypen

Kompileren udleder returtypen fra kroppen. Gør den eksplicit, når det er nødvendigt.

auto half = [](int x) -> double { return x / 2.0; };

Generiske lambdafunktioner (C++14)

Brug auto i parameterlisten for at få en generisk lambdafunktion, der fungerer med enhver type.

auto print = [](const auto& x) { std::cout << x << "\n"; };
print(42);          // int
print("hello");    // const char*
print(3.14);       // double

Lambdaer som funktionsargumenter

STL-algoritmer accepterer lambdaer som prædikater og transformationer.

std::vector<int> v = {5, 2, 8, 1};
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });

Lambdaer er funktionsobjekter

Under motorhjelmen genererer kompileren en klasse med operator(). Du kan gemme lambdaer i std::function eller auto.

Hurtigt tjek

Kan du tildele en værdi til n inde i en lambda som [n](int x) { return x * n; } uden at gøre lambdaen mutable?

Opsummering

Lambdaer er anonyme funktionsobjekter, der er skrevet direkte i koden. Fang efter værdi eller reference, markér med mutable for at ændre værdifangede variable, og brug auto-parametre til generiske lambdaer i C++14 og nyere.

Gratis at komme i gang

Lær C++ med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
51
Lektioner
203

Ofte stillede spørgsmål

Er lektionen “Lambdaudtryk: capture, mutable, generiske parametre” gratis?

Ja — alle 3 lektioner i læringssporet C++ Academy, inklusive “Lambdaudtryk: capture, mutable, generiske parametre”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. C++ Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Lambdaudtryk: capture, mutable, generiske parametre”?

Skriv lambdaer med captures, mutable-semantik og generiske auto-parametre Du øver dig i C++ Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på C++ Academy?

Der kræves ingen tidligere erfaring. C++ Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Lambdaudtryk: capture, mutable, generiske parametre”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne C++ Academy-lektion?

Ja. Alle C++ Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. auto, decltype og typeudledning
  2. Range-baseret for, nullptr og enum class
  3. Lambdaudtryk: capture, mutable, generiske parametre
  4. Strukturerede bindinger og if-init i C++17
← Tilbage til C++ Academy