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 kopie

    int 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.


Log in to reply