Was wird hier deklariert?
-
Hallo zusammen,
kann mir bitte kurz jemand erklären, was genau in dieser Zeile passiert?
static constexpr auto calculateID = [](auto& device){return device->ID * 10;}
(Das die ID quatsch ist, ist klar, soll ein Minimalbeispiel sein)
Vielen Dank!LG
Simon
-
Das ist ein constexpr lambda.
Übrigens erst ab C++17 erlaubt.Sind dir C++ Lambdas bekannt?
-
Nein, bisher noch nicht.
Falls du es mir in zwei Sätzen erklären kannst, wäre ich dir sehr dankbar. Ansonsten würde ich google bemühen um mich einzuabreiten.
-
Lambdas sind die Umsetzung von anonymen Funktionen (bzw Funktionsobjekte) in C++.
Ein Lambda sieht so aus:
[](){}
[]
Hiermit kann man Variablen an das Lambda binden (stichwort lambda capture), zum Beispiel aus dem Scope wo die Lambdafunktion deklariert wird. Dies kann per kopieint a = 0; auto lam = [=a](){}; auto lam2 = [a](){};
oder referenz passieren.
int a = 0; auto lam = [&a]() { std::cout << a << "\n"; }; lam();
Die Klammern
()
und{/*...*/}
sind einfach wie bei normalen Funktionen für Parameter und Funktionskörper.
-
Vielen Dank!
Das hilft mir schonmal.