constexpr Lambda-Ausdrücke in C++

Visual Studio 2017, Version 15.3 und höher (verfügbar im /std:c++17 Modus und höher): Ein Lambda-Ausdruck kann in constexpr einem konstanten Ausdruck deklariert oder verwendet werden, wenn die Initialisierung der einzelnen Datenmemmelemente, die er erfasst oder einführt, innerhalb eines konstanten Ausdrucks zulässig ist.

    int y = 32;
    auto answer = [y]() constexpr
    {
        int x = 10;
        return y + x;
    };

    constexpr int Increment(int n)
    {
        return [n] { return n + 1; }();
    }

Eine Lambda-Funktion ist implizit constexpr , wenn ihr Ergebnis den Anforderungen einer constexpr Funktion entspricht:

    auto answer = [](int n)
    {
        return 32 + n;
    };

    constexpr int response = answer(10);

Wenn eine Lambda-Funktion implizit oder explizit constexprist und Sie sie in einen Funktionszeiger konvertieren, lautet die resultierende Funktion auch constexpr:

    auto Increment = [](int n)
    {
        return n + 1;
    };

    constexpr int(*inc)(int) = Increment;

Siehe auch

C++-Programmiersprachenreferenz
Funktionsobjekte in der C++-Standardbibliothek
Funktionsaufruf
for_each