c++ - Was ist der Zweck dieses Lambda?




c++14 (2)

Dies wird als sofort aufgerufenes Lambda (IIL) bezeichnet.

Zuerst wird das Lambda ( [] () {...} ) deklariert, dann wird es sofort aufgerufen ( () - unmittelbar nach dem Lambda).

Dies kann auf verschiedene Arten verwendet werden:

  • initialisiere eine const Variable durch komplizierte Logik
    const auto v = [] () {
        if (...) return X;
        else return Y;
   }
  • Initialisieren Sie eine statische Variable mit komplizierter Logik

  • Rufen Sie eine IIL auf, um einen Wert für einen Parameter einer Funktion zu erstellen

     auto x = foo(a, b, [c] () {return c > 42;} () );
  • Da statische Variablen frühzeitig initialisiert werden, indem eine statische Variable verwendet wird, deren Wert ignoriert wird, die jedoch mit einer IIL initialisiert wird, können vor der Ausführung von main Aktionen ausgeführt werden.

Diese Frage hat hier bereits eine Antwort:

Ich sehe das folgende Lambda in C ++ - Code. Was ist der Zweck davon?

static const auto faster = [](){
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    return nullptr;
}();

Diesen Code sehen Sie normalerweise in Wettbewerbsbeiträgen für Online-Juroren, die C ++ I / O im Hintergrund verwenden. Um die Laufzeit Ihrer Einreichungen zu erhöhen, können Sie die Streams trennen und die Synchronisierung von C ++ - IOS-Streams mit den Standard-C-Streams aufheben. Die Verwendung von Lambda ist eine einfache Möglichkeit, den Code sofort dort auszuführen, wo die Variable deklariert ist. Um die volle Wirkung dieser Optimierung zu erzielen, sollte sie vor jedem anderen Code platziert werden.





c++14