Udostępnij za pośrednictwem


wyrażenia lambda constexpr w języku C++

Program Visual Studio 2017 w wersji 15.3 lub nowszej (dostępny w /std:c++17 trybie i nowszych): wyrażenie lambda może być zadeklarowane jako constexpr lub używane w wyrażeniu stałym, gdy inicjowanie każdego elementu członkowskiego danych, który przechwytuje lub wprowadza, jest dozwolone w wyrażeniu stałym.

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

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

Lambda jest niejawnie constexpr , jeśli jego wynik spełnia wymagania constexpr funkcji:

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

    constexpr int response = answer(10);

Jeśli lambda jest niejawnie lub jawnie constexpr, i konwertujesz go na wskaźnik funkcji, wynikowa funkcja jest również constexpr:

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

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

Zobacz też

Dokumentacja języka C++
Obiekty funkcji w standardowej bibliotece C++
Wywołanie funkcji
for_each