Lambda i C++11

Lambda-uttryck introduceras i C++-2011. Ett lambda-uttryck är som en kort funktion som kan användas där man normalt hade behövt anropa en vanlig funktion. Här följer ett exempel på en predikatsfunktion som är sann för udda tal.

[](int x) { return x % 2 == 1; }

Det här är alltså ett lambda-uttryck som tar en parameter av typen int. Returtypen definieras implicit av return-satsen och är i det här fallet bool. Det senare är ytterligare ett exempel där kompakt notation används. Lambda-uttrycket kan t.ex. användas i en count_if-algoritm, så här:

list<int> numbers {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int numberOfOdd = count_if(numbers.begin(), numbers.end(),
                           [](int x) { return x % 2 == 1; });

Man behöver alltså inte skapa någon lokal predikatfunktion längre. Lambda-uttrycket kan definieras direkt på platsen där det används.

Men det finns mer. Vi såg just att lambda-uttrycket kan ha argument men det kan också binda till variabler som är tillgängliga vid definitionen:

int sum = 0;
for_each(numbers.begin(), numbers.end(), 
         [&sum](int x) { sum += x; });

Variabeln sum är tillgänglig i lambda-uttrycket och nås som en referens.  [&sum]-notationen  i början av uttrycket skapar den bindningen.

I nästa inlägg skall vi titta mer på lambda-uttrycken och closures.

Publicerad i C/C++
0 comments on “Lambda i C++11
1 Pings/Trashbacks för "Lambda i C++11"
  1. […] vi såg i exemplet med att beräkna summan kunde vi i lambdauttrycket binda en variabel från den omgivning där lambdat definierades, […]

Kategorier

WP to LinkedIn Auto Publish Powered By : XYZScripts.com