Frage zu extended capturing in lambdas



  • Hi,
    Ich habe folgendes Beispiel gefunden. Nur leider verstehe ich es nicht ganz. Es kompiliert mir zwar, aber ich weiss auch nicht wie ich den daraus entstehenden "timer()" eigentlich benutze.

    Frage:
    1. Vllt koennte mir jemand etwas erklaeren wie dieses Lambda funktioniert. So wie ich es verstehe wird val eingangs mit now() initialisiert und die lambdafunktion "subtrahiert" von now() dann den in val gespeicherten Wert?! Bzw. ist die Initialisierung eher im Sinne von, wenn kein argument mitgeliefert ist, wird val eben mit now() initialisiert?

    2. Kann ich timer() irgendwie benutzen um eine "brauchbare" Ausgabe zu erzeugen? also irgendetwas was ich per cout anzeigen lassen kann?

    #include <iostream>
    #include <chrono> // system_clock
    using namespace std;
    using namespace chrono;
    
    int main()
    {
       // in C++14, captured variables can have an initializing expression
      auto timer = [val = system_clock::now()]{ return system_clock::now() - val; };
      timer();
    }
    

    Danke im Voraus!

    Edit: C++14, g++ 5 compiler auf Debian



  • Zur 2. Frage:

    // ...
    auto diff = timer();
    
    std::cout << diff.count() << std::endl;
    

Anmelden zum Antworten